.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

ControlLibrary

Letzter Beitrag 07-22-2008 12:03 von knatterton. 8 Antworten.
Seite 1 von 1 (9 Treffer)
Beiträge sortieren: Zurück Weiter
  • 07-18-2008 15:10

    • knatterton
    • Top 25 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 16
    • Punkte 350

    ControlLibrary

    Hi

    Ich habe eine Frage zu ControlLibraries. Ich hatte gedacht man könnte Controls in einer ControlLibrary definieren und sie dann anschließend zu einem Gesamtprojekt hinzufügen. Das habe ich jetzt mit einem elliptischen Image-Button ausprobiert. Dazu muss ja das Control von Button erben und das Image als DependencyPropery registriert werden wenn ich die Daten dynamisch halten will. Das einbinden und referenzieren klappt alles. Ich habe jetzt aber das Problem, dass das Objekt gar nicht mehr weiß, dass es ein Button ist. Das ImageProperty ist auch nicht mehr da. Beim Anlegen einer ControlLibrary ist das erste Element im Tree ein UserControl. In einem Buch habe ich gelesen, dass UserControls keine Templates unterstützen. Da aber mein Button nur mit einem Template funktioniert, funktioniert er deshalb in meiner referenzierten Controllibrary nicht?  

    Kombiniere...
    Abgelegt unter:
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-19-2008 15:49 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 325
    • Punkte 4.969
    • ForumsAdministrator

    AW: ControlLibrary

    Da ich nicht sehe was genau du gemacht hast, kann ich dir die Gründe nicht sagen, warum dein Button nicht funktioniert. Was ich dir aber sagen kann:

    UserControls können von extern nicht getemplated werden, da diese nur ein Zusammensetzen von bereits vorhanden Elementen sind. D.h. die einzelnen Elemente kannst du innerhalb deines neuen Buttons sehr wohl mit einem Template versehen, aber dein neues Element als solches kann nicht getemplated werden. Anders ist dies bei einem Custom Control.

    Wenn dein Element von einem Button erbt, dann ist es auch ein Button und bleibt das auch weiterhin. Daher kann ich dir diesbezüglich nicht weiterhelfen, ohne dass du zeigst, was genau du gemacht hast.

     

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-21-2008 8:13 Antwort zu

    • knatterton
    • Top 25 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 16
    • Punkte 350

    AW: ControlLibrary

    Ok vielen Dank für die Antwort. Da ich die Controllibrary später nicht mehr templaten kann fällt die Variante für mich schon mal raus. Controllibrary bedeutet ja auch gleichzeitig, dass es ein UserControl ist richtig? Zumindest habe ich in Blend oder im Studio die Möglichkeit ein Projekt Controllibrary anzulegen, dass dann gleichzeitig sofort als UserControl angelegt wird. Die Geschichte mit dem CustomControl würd mich schon interessieren. In der Hilfe von Blend komme ich zu dem Artikel "Try it: Create a custom WPF control". Da wird das mit dem ImageButton erklärt. Wenn dass das CustomControl ist was du angesprochen hast weiß ich wie es funktioniert. Oder meintest du noch etwas anderes? Wegen dem UserControl poste ich mal den Code. Vielleicht kann man da sehen was ich falsch gemacht habe. Das UserControl habe ich im Studio erst von Button geerbt und dann in Blend weiter bearbeitet. Dann habe ich die DLL genommen und mit Blend in ein anderes Projekt eingebunden. Das Control sehe ich aber ich kann habe das SourceProperty nicht usw.         

     

    <UserControl
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    	mc:Ignorable="d"
    	x:Class="ImageButtonLibrary.UserControl1"
    	x:Name="UserControl"
    	d:DesignWidth="640" d:DesignHeight="480" xmlns:ImageButtonLibrary="clr-namespace:ImageButtonLibrary">
    
    	<UserControl.Resources>
    		<Style x:Key="ImageButtonStyle1" TargetType="{x:Type ImageButtonLibrary:ImageButton}">
    			<Setter Property="Template" Value="{DynamicResource ImageButtonControlTemplate1}"/>
    		</Style>
    		<ControlTemplate x:Key="ImageButtonControlTemplate1" TargetType="{x:Type ImageButtonLibrary:ImageButton}">
    			<Grid Width="100" Height="100">
    				<Ellipse Fill="#FFFFFFFF" Stroke="#FF000000"/>
    				<Image Source="{TemplateBinding Source}"/>
    				<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Left" Content="{TemplateBinding Content}"/>
    			</Grid>
    		</ControlTemplate>
    	</UserControl.Resources>
    
    	<Grid x:Name="LayoutRoot">
    		<ImageButtonLibrary:ImageButton HorizontalAlignment="Left" Style="{DynamicResource ImageButtonStyle1}" VerticalAlignment="Top"/>
    	</Grid>
    </UserControl>
     
    public class ImageButton : Button
        {
            public ImageSource Source
            {
                get { return base.GetValue(SourceProperty) as ImageSource; }
                set { base.SetValue(SourceProperty, value); }
            }
    
            public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(ImageSource), typeof(ImageButton));
        }
     
     
    <Window
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	x:Class="ImageButtons.Window1"
    	x:Name="Window"
    	Title="Window1"
    	Width="640" Height="480" xmlns:ImageButtons="clr-namespace:ImageButtons" xmlns:ImageButtonLibrary="clr-namespace:ImageButtonLibrary;assembly=ImageButtonLibrary">
    
    	<Grid x:Name="LayoutRoot">
    		<ImageButtons:ImageButton HorizontalAlignment="Left" x:Name="btn1" Style="{DynamicResource ImageButtonStyle2}" VerticalAlignment="Top" Content="" Click="btn1_Click" Height="24" Width="35"/>
    		<ImageButtonLibrary:ImageButton HorizontalAlignment="Left" Margin="0,28,0,0" VerticalAlignment="Top" Content="ImageButton" Width="73.067"/>
    		<ImageButtonLibrary:UserControl1 HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" Width="Auto" Margin="104,28,0,0" x:Name="userButton" MouseLeftButtonUp="userButton_MouseLeftButtonUp"/>
    	</Grid>
    </Window>
     
    private void userButton_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                ImageSource myImage = FindResource("close") as ImageSource;
                //userButton.So
            }
    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 9:36 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 325
    • Punkte 4.969
    • ForumsAdministrator

    AW: ControlLibrary

    Wo genau hast du die Source-Property nicht? Beim UserControl ist klar, da du dort deinen ImageButton nur hostest.
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 9:59 Antwort zu

    • knatterton
    • Top 25 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 16
    • Punkte 350

    AW: ControlLibrary

    Dort in der MouseLeftButtonUp. Der Button ist ja da weil ich da ja auch mein Event habe aber das Property ist nicht da. Im UserControl gab es auch mal ein Clickevent. Das gibt es nachdem ich es in die das Programm referenziert habe auch nicht mehr.
    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 10:08 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 325
    • Punkte 4.969
    • ForumsAdministrator

    AW: ControlLibrary

    Das ist auch das Event von deinem UserControl und nicht vom Button.

    Vielleicht solltest du kurz erklären, was genau du machen willst und wie es aussehen soll, denn mir scheint, dass dein Weg nicht der richtige ist, für das was du willst.

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 10:17 Antwort zu

    • knatterton
    • Top 25 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 16
    • Punkte 350

    AW: ControlLibrary

    Ich möchte einen Weg finden wie man Controls unabhängig von einem Gesamtprojekt entwickeln kann. Da dachte ich müsste eines der beiden Varianten wohl in Frage kommen. Wie in dem Beispiel möchte ich ein User oder CustomControl anlegen wo nur der eine Button enthalten ist. Oder vielleicht auch eine ganze Liste von Controls. Aber die Controls die dort enthalten sind müssen ja auch mit Daten gefüllt werden. Deswegen habe ich jetzt irgendwie versucht das ImageProperty von dem Button in dem User oder CustomControl zu setzen. Kann ich denn noch auf das Property zugreifen oder ist das an der Stelle wo ich die DLL eingebunden haben schon abgekapselt?
    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 10:24 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 325
    • Punkte 4.969
    • ForumsAdministrator

    AW: ControlLibrary

    Answer
    Ok. In deinem Fall brauchst du das UserControl nicht. Deinen ImageButton kannst ja ruhig in eine ControlLibrary legen. Spricht ja nichts dagegen. Allerdings solltest du auch nur den ImageButton alleine aufrufen, so á la:
    <local:ImageButton Source="...">Klick mich</local:ImageButton>
    Wobei local hier dein eigener Namespace ist. Die Source für die Image-Geschichte kannst du dann bei jeder Verwendung individuell setzen. Hier musst du halt ein Template dann noch extra festlegen.

    Wenn du das in einem UserControl machen willst (weil du dort ein fixes Template vergibst), dann muss dein UserControl die entsprechenden Properties besitzen und an deinen Button weiterreichen.
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-22-2008 12:03 Antwort zu

    • knatterton
    • Top 25 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 16
    • Punkte 350

    AW: ControlLibrary

    Ok ich habs glaub ich verstanden. Ich habs auch gerade einmal ausprobiert. Ich habe die Source. Schade, dass ich das Template noch einmal neu anlegen muss. Das war nicht mein Ziel. Und das ich einem UserControl erst noch mitteilen muss was ich alles haben will ist wieder mehr Arbeit und fehleranfällig. Ich glaube es wird am einfachsten sein die Controls zu templaten die RecourceDics und die die Klassen in denen die Controls abgeleitet wurden zu dem Gesamtprojekt zu kopieren. Aber auch nur dann wenn man Probleme bekommen sollte wenn alle an dem Gesamtprojekt arbeiten sollten. Danke, mir ist da glaub ich einiges klarer geworden.
    Kombiniere...
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (9 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions