2017-03-23 3 views
-1

Ich habe eine DLL, die das WPF-Benutzersteuerelement enthält.Wie setze ich den öffentlichen Variablenwert vom wpf-Benutzersteuerelement?

Ich habe ein WPF-Fenster in einem anderen WPF-Projekt, das das obige Benutzersteuerelement darin enthält.

Ich habe zwei öffentliche Eigenschaften in WPF-Benutzersteuerung.

Ich möchte diese Eigenschaften aus dem WPF-Fenster, in dem WPF-Benutzersteuerelement hinzugefügt wird, festlegen.

Ich habe versucht, es mit Abhängigkeitseigenschaft tun wie folgt:

TestUserControl.xaml: -

<UserControl x:Class="TestDependencyProperty.TestUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Label Content="test property" x:Name="lblTestProperty"/> 
    </Grid> 
</UserControl> 

TestUserControl.xaml.cs: -

using System.ComponentModel; 
using System.Windows; 

namespace TestDependencyProperty 
{ 
    /// <summary> 
    /// Interaction logic for TestUserControl.xaml 
    /// </summary> 
    public partial class TestUserControl 
    { 
     public TestUserControl() 
     { 
      InitializeComponent(); 
      SetLabelText(); 
     } 

     private void SetLabelText() 
     { 
      lblTestProperty.Content = TestProperty; 
     } 

     public static readonly DependencyProperty TestDependencyProperty = 
      DependencyProperty.Register("TestProperty", 
       typeof(string), 
       typeof(TestUserControl)); 

     [Bindable(true)] 
     public string TestProperty 
     { 
      get 
      { 
       return (string)this.GetValue(TestDependencyProperty); 
      } 
      set 
      { 
       this.SetValue(TestDependencyProperty, value); 
      } 
     } 
    } 

MainWindow.xaml : -

<Window x:Class="TestDependencyProperty.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     xmlns:local="clr-namespace:TestDependencyProperty" 
     > 
    <Grid> 
     <local:TestUserControl x:Name="ucTest" TestProperty="HelloWorld"/> 
    </Grid> 
</Window> 

Ich erwarte ein Label mit Inhalt "HelloWorld".

Also kann mir jemand sagen, wie es geht?

Danke.

+1

Was haben Sie versucht? Haben Sie schon einmal eine Eigenschaft in WPF festgelegt? Wie hast du es das letzte Mal gemacht? Warum denkst du, ist dieser Fall anders? Haben Sie hier ein konkretes Problem? –

+0

Haben Sie Abhängigkeitseigenschaften verwendet? –

+0

@Ed Plunkett Danke für die Antwort, ich habe nicht versucht, öffentliche Variable von Benutzersteuerungseigenschaft vorher zu binden. Wenn Sie ein Code-Snippet zu diesem Problem haben, leiten Sie es weiter. Vielen Dank. – pankaj

Antwort

0

User Control XAML:

<UserControl x:Class="TestDependencyProperty.TestUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WpfApplication3" 
      DataContext="{Binding RelativeSource={RelativeSource Self}}" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Label Content="{Binding TestProperty}" x:Name="lblTestProperty"/> 
    </Grid> 
</UserControl> 

Benutzer Control-Code:

public partial class TestUserControl : UserControl 
    { 
     public TestUserControl() 
     { 
      InitializeComponent(); 
     } 

     public static readonly DependencyProperty TestDependencyProperty = 
      DependencyProperty.Register("TestProperty", 
       typeof(string), 
       typeof(TestUserControl)); 

     [Bindable(true)] 
     public string TestProperty 
     { 
      get 
      { 
       return (string)this.GetValue(TestDependencyProperty); 
      } 
      set 
      { 
       this.SetValue(TestDependencyProperty, value); 
      } 
     } 
} 

Sie brauchen nicht SetLabelText();

Fenster Hosting Benutzer Control

<local:TestUserControl TestProperty="Test Text" x:Name="MyNewUserControl" /> 

in Code-behind, wenn nötig:

MyNewUserControl.TestProperty="New Value"; 

Abhängigkeitseigenschaften haben Änderungsbenachrichtigung in ihnen so einmal gebaut eine Eigenschaft an sie gebunden wird sie automatisch erhalten aktualisiert, wenn das Eigentum tut.

Verwandte Themen