Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Eigenschaft eines WPF UserControls im Editor anzeigen

  1. #1
    Registriert seit
    21.10.2009
    Ort
    BW
    Beiträge
    62
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    Zuerst muss ich sagen, dass ich noch nicht allzuviel Erfahrung mit WPF habe.
    Mein Problem:
    Ich habe mir selbst ein WPF-UserControl erstellt und dazu eine Eigenschaft implementiert.

    Zuerst habe ich es gemacht, wie ich es von Windows Forms gewohnt war:

    Code:
                [Description("Darstellung des Ventils: \ntrue=Vertikal false=Horizontal")]
            public bool Ausrichtung                       //Ausrichtung des Ventils bestimmen
            {
                get { return a1; }
                set { a1 = value;
                if (a1)
                    pict_Ventil.Image = Image.FromFile(
                    Application.StartupPath
                    + @"\Bmp\Ventile\Ventil_Ver_Anwahl.bmp");
                else
                    pict_Ventil.Image = Image.FromFile(
                     Application.StartupPath
                     + @"\Bmp\Ventile\Ventil_Hor_Anwahl.bmp");
                }
            }
    Nach etwas suchen bin ich auf die Sache mit der DependencyProperty gestoßen...
    Die Eigenschaft sieht nun folgendermaßen aus, jedoch wird Die Eigenschaft im Editor immer noch nicht angezeit.

    Code:
               ...
    public static readonly DependencyProperty a1 =
                DependencyProperty.Register("Ausrichtung", typeof(bool), typeof(Ventil));
    [Description("Darstellung des Ventils: \ntrue=Vertikal false=Horizontal")]
            public bool Ausrichtung                       //Ausrichtung des Ventils bestimmen
            {
                get { return a1; }
                set { a1 = value;
                if (a1)
                    pict_Ventil.Image = Image.FromFile(
                    Application.StartupPath
                    + @"\Bmp\Ventile\Ventil_Ver_Anwahl.bmp");
                else
                    pict_Ventil.Image = Image.FromFile(
                     Application.StartupPath
                     + @"\Bmp\Ventile\Ventil_Hor_Anwahl.bmp");
                }
            }
    ...
    Nach ewiger "erfolgloser" Suche hoff ich nun, dass mir hier jemand weiterhelfen kann...

    Vielen Dank im vorraus
    Wer anderen eine Steuerung steuert,
    hat meisst ein Steuerungs-steuer-steuerer...
    Zitieren Zitieren Eigenschaft eines WPF UserControls im Editor anzeigen  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Nicht ganz meine Ecke, aber

    If .....

    Then <--- fehlt doch, oder ?


    Else....

  3. #3
    Registriert seit
    21.10.2009
    Ort
    BW
    Beiträge
    62
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Sorry, vergessen zu erwähnen das ich in C# Programmiere...
    Da kann man einzeige Anweisungen direkt unter das if setzen. Bei mehrzeiligen braucht man
    if...
    {
    ...
    ...
    }

    "Then" ist ja VB und fällt bei C# weg
    Wer anderen eine Steuerung steuert,
    hat meisst ein Steuerungs-steuer-steuerer...

  4. #4
    Registriert seit
    30.09.2009
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Versuch es mal damit...


    c# Code
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.ComponentModel;
    namespace Nutz
    {
    /// <summary>
    /// Interaction logic for iCVentil.xaml
    /// </summary>
    public partial class iCVentil : UserControl
    {
    public iCVentil()
    {
    this.InitializeComponent();
    SetVentilTyp();
    }
    //---------------------------------------------------------
    //Event für die Ventile
    private void Vr_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
    if( iCMouse == true)
    iCActCondition = !iCActCondition;
    }
    private void Ho_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {

    if( iCMouse == true)
    iCActCondition = !iCActCondition;
    }
    private void Vl_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
    if( iCMouse == true)
    iCActCondition = !iCActCondition;
    }
    private void Hu_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
    if( iCMouse == true)
    iCActCondition = !iCActCondition;
    }

    //---------------------------------------------------------
    //Alle Notwendigen Ventiltypen
    //---------------------------------------------------------
    private void SetVentilTyp()
    {
    Brush CurrentBrush;

    Ho.Visibility = Visibility.Hidden;
    Hu.Visibility = Visibility.Hidden;

    Vr.Visibility = Visibility.Hidden;
    Vl.Visibility = Visibility.Hidden;


    if (iCActCondition == false)
    {
    CurrentBrush = iCColorClose;
    }
    else
    {
    CurrentBrush = iCColorOpen;
    }

    switch((int)iCVentilTyp)
    {
    //Einweg Horizontal
    case 0: Ho.Visibility = Visibility.Visible;
    Hu.Visibility = Visibility.Visible;
    Hu.Fill = CurrentBrush;
    Ho.Fill = CurrentBrush;

    break;

    //Einweg Vertical
    case 1: Vr.Visibility = Visibility.Visible;
    Vl.Visibility = Visibility.Visible;
    Vr.Fill = CurrentBrush;
    Vl.Fill = CurrentBrush;

    break;

    //Rechts / Oben
    case 2: Vr.Visibility = Visibility.Visible;
    Ho.Visibility = Visibility.Visible;
    Vr.Fill = CurrentBrush;
    Ho.Fill = CurrentBrush;

    break;

    //Rechts / Unten
    case 3: Vr.Visibility = Visibility.Visible;
    Hu.Visibility = Visibility.Visible;
    Vr.Fill = CurrentBrush;
    Hu.Fill = CurrentBrush;

    break;

    //Links / Unten
    case 4: Vl.Visibility = Visibility.Visible;
    Hu.Visibility = Visibility.Visible;
    Vl.Fill = CurrentBrush;
    Hu.Fill = CurrentBrush;

    break;

    //Rechts / Unten
    case 5: Vr.Visibility = Visibility.Visible;
    Hu.Visibility = Visibility.Visible;
    Vr.Fill = CurrentBrush;
    Hu.Fill = CurrentBrush;
    break;

    //Rechts / Unten
    case 6: Vr.Visibility = Visibility.Visible;
    Hu.Visibility = Visibility.Visible;
    Vl.Visibility = Visibility.Visible;
    Vr.Fill = CurrentBrush;
    Vl.Fill = CurrentBrush;
    Hu.Fill = CurrentBrush;
    break;
    }
    }


    private static void MyVentilCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
    iCVentil iCX = d as iCVentil;
    iCX.SetVentilTyp();
    }



    //------------------------------------------------------
    //MouseBedienung
    //-------------------------------------------------------
    [Category("iCControlParameter")]
    public bool iCMouse
    {
    get{return (bool)GetValue(iCMouseProperty);}
    set{SetValue(iCMouseProperty, value);}
    }

    public static readonly DependencyProperty iCMouseProperty =
    DependencyProperty.Register("iCMouse", typeof(bool), typeof(iCVentil), new UIPropertyMetadata(true, new PropertyChangedCallback(MyVentilCallback)));


    //------------------------------------------------------
    //Condition On/Off 0 -5
    //-------------------------------------------------------
    [Category("iCControlParameter")]
    public bool iCActCondition
    {
    get{return (bool)GetValue(iCActConditionProperty);}
    set{SetValue(iCActConditionProperty, value);}
    }

    public static readonly DependencyProperty iCActConditionProperty =
    DependencyProperty.Register("iCActCondition", typeof(bool), typeof(iCVentil), new UIPropertyMetadata(false, new PropertyChangedCallback(MyVentilCallback)));


    //------------------------------------------------------
    //Ventiltyp 0 -5
    //-------------------------------------------------------
    [Category("iCControlParameter")]
    public double iCVentilTyp
    {
    get{return (double)GetValue(iCVentilTypProperty);}
    set{SetValue(iCVentilTypProperty, value);}
    }

    public static readonly DependencyProperty iCVentilTypProperty =
    DependencyProperty.Register("iCVentilTyp", typeof(double), typeof(iCVentil), new UIPropertyMetadata(0.0, new PropertyChangedCallback(MyVentilCallback)));


    //------------------------------------------------------
    //Farbe Zustand close
    //-------------------------------------------------------
    [Category("iCControlParameter")]
    public Brush iCColorClose
    {
    get {return (Brush)GetValue(iCColorCloseProperty);}
    set {SetValue(iCColorCloseProperty, value);}
    }
    public static readonly DependencyProperty iCColorCloseProperty =
    DependencyProperty.Register("iCColorClose", typeof(Brush), typeof(iCVentil), new UIPropertyMetadata(Brushes.Red, new PropertyChangedCallback(MyVentilCallback)));

    //------------------------------------------------------
    //Farbe Zustand open
    //-------------------------------------------------------

    [Category("iCControlParameter")]
    public Brush iCColorOpen
    {
    get {return (Brush)GetValue(iCColorOpenProperty);}
    set {SetValue(iCColorOpenProperty, value);}
    }
    public static readonly DependencyProperty iCColorOpenProperty =
    DependencyProperty.Register("iCColorOpen", typeof(Brush), typeof(iCVentil), new UIPropertyMetadata(Brushes.Green, new PropertyChangedCallback(MyVentilCallback)));



    }
    }



    XAML Code....Da sind die Ventile drin

    <UserControl
    xmlns="http://schemas.microsoft.com/winfx/2...l/presentation"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/ma...atibility/2006"
    mc:Ignorable="d"
    x:Class="Nutz.iCVentil"
    x:Name="UserControl" Height="80" Width="79.667">
    <Viewbox Stretch="Fill" >
    <Grid x:Name="MyGrid" Height="80.333" Width="80">
    <Path x:Name="Vl" Fill="#FFE01616" Stretch="Fill" Stroke="Black" Margin="0.167,20.081,39.342,19.759" Data="M39.5,39.5 L39.5,79.5 79.5,59.166667 z" MouseLeftButtonDown="Vl_MouseLeftButtonDown"/>
    <Path x:Name="Vr" Fill="#FFE01616" Stretch="Fill" Stroke="Black" HorizontalAlignment="Right" Margin="0,19.587,0.333,20.253" Width="39.503" Data="M39.5,39.5 L39.5,79.5 79.5,59.166667 z" RenderTransformOrigin="0.5,0.5" MouseLeftButtonDown="Vr_MouseLeftButtonDown">
    <Path.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="-1"/>
    <SkewTransform/>
    <RotateTransform/>
    <TranslateTransform/>
    </TransformGroup>
    </Path.RenderTransform>
    </Path>
    <Path x:Name="Hu" Fill="#FFE01616" Stretch="Fill" Stroke="Black" Margin="20.602,40.082,19.32,-0.094" Data="M38.902941,39.650301 L39.5,79.5 79.5,59.166667 z" RenderTransformOrigin="0.5,0.5" MouseLeftButtonDown="Hu_MouseLeftButtonDown">
    <Path.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="-1.0000673962837654" ScaleY="0.99993260825818753"/>
    <SkewTransform AngleY="0.00012859966321343563"/>
    <RotateTransform Angle="89.045935698002282"/>
    <TranslateTransform X="-0.21830202583907976" Y="-0.214711602900735"/>
    </TransformGroup>
    </Path.RenderTransform>
    </Path>
    <Path x:Name="Ho" Fill="#FFE01616" Stretch="Fill" Stroke="Black" Margin="21.081,-1.076,18.672,0" Data="M39.5,39.5 L38.726389,79.004427 79.5,59.166667 z" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Top" Height="40.004" MouseLeftButtonDown="Ho_MouseLeftButtonDown">
    <Path.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="-1.0000674038794131" ScaleY="0.99993260066356382"/>
    <SkewTransform AngleY="-9.908580004491796E-05"/>
    <RotateTransform Angle="-89.264950455430608"/>
    <TranslateTransform X="-0.62123535044228007" Y="0.61335806666287951"/>
    </TransformGroup>
    </Path.RenderTransform>
    </Path>
    <Ellipse Fill="#FF080812" Margin="35.158,34.938,34.467,34.771" Stroke="Black"/>
    </Grid>

    </Viewbox>

    </UserControl>

  5. #5
    Registriert seit
    21.10.2009
    Ort
    BW
    Beiträge
    62
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Problem gelöst, falls es jemanden interessiert

    Der Fehler lag darin, dass ich eine "WPF-Benutzersteuerelementbibliothek"
    erstellt habe. Um es richtig zu machen muss man eine
    "Benutzerdefinierte WPF-Benutzersteuerelementbibliothek" erstellen,
    welche ansich gleich aussieht aber nicht so ist...

    Grüße
    Wer anderen eine Steuerung steuert,
    hat meisst ein Steuerungs-steuer-steuerer...

  6. #6
    Registriert seit
    07.09.2005
    Ort
    MOS
    Beiträge
    156
    Danke
    22
    Erhielt 26 Danke für 17 Beiträge

    Standard

    Hallo,

    ich denke der Fehler lag nicht darin.
    Die Dep.Props. kannst du auf beiden Controls erstellen, und "von extern" darauf zugreifen.

    Code:
    <Window x:Class="WPF_Test_Control.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:myCL="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
        xmlns:myCCL="clr-namespace:WpfCustomControlLibrary1;assembly=WpfCustomControlLibrary1"
        Title="Window1" Height="300" Width="300">
        <Grid>
            <myCL:UserControl1 x:Name="UserControl1" MyProperty="1"></myCL:UserControl1>
            <myCCL:CustomControl1 x:Name="CustomUserControl1" MyProperty="1" ></myCCL:CustomControl1>
            
        </Grid>
    </Window>
    Obiger Quellcode:
    Ich habe ein UserControl (WPF-Benutzersteuerelementbibliothek) und ein CustomUserControl (Benutzerdefinierte WPF-Benutzersteuerelementbibliothek) erstellt und in eine Windows-WPF Anwendung eingefügt. Beide haben die Dep. Prop. MyProperty (int). Auf beide kann zugegriffen werden. Diese werden auch im Designer angezeigt.

    Bei den beiden von dir erwähnten Controls handelt es sich um zwei grundverschiedene Arten von Controls.

    Viele Grüße
    David

  7. Folgender Benutzer sagt Danke zu david.ka für den nützlichen Beitrag:

    Marc_Quark (23.09.2010)

  8. #7
    Registriert seit
    21.10.2009
    Ort
    BW
    Beiträge
    62
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für die Antwort David,

    find es nur komisch das bei mir die Projekte mit gleichem Quellcode nur beim CustomUserControl richtig fuktionierten... Für mich ist erstmal die Hauptsache das es funktioniert, wenn ich mal wieder etwas mehr Zeit habe werde ich mich genauer damit befassen...

    Grüsse
    Wer anderen eine Steuerung steuert,
    hat meisst ein Steuerungs-steuer-steuerer...

  9. #8
    Registriert seit
    07.09.2005
    Ort
    MOS
    Beiträge
    156
    Danke
    22
    Erhielt 26 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Marc_Quark,
    bitte.
    Du musst nur brachten, dann du bei deinem Control "selber zeichnen musst".
    die andere Art ist quasi ein Container, in das du beliebige Controls per drag&drop einfügen kannst....

Ähnliche Themen

  1. Antworten: 19
    Letzter Beitrag: 20.12.2010, 07:52
  2. Antworten: 9
    Letzter Beitrag: 21.09.2010, 23:10
  3. Antworten: 40
    Letzter Beitrag: 08.12.2008, 13:38
  4. Restzeit eines Timers anzeigen S7 200
    Von don_g im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 22.01.2008, 20:43
  5. Problem mit Bildbaustein Eigenschaft
    Von LtCooperHawkes im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.01.2007, 12:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •