0

String 型のCustomLabelという名前の依存関係プロパティを持つ UserControl を作成しました。

コントロールには、 CustomLabelプロパティの値を表示する Label が含まれています。

OnLabelPropertyChangedイベント ハンドラーを使用してコードでこれを行うことができます。

public class MyControl : UserControl
{
    public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
        "Label",
        typeof(String),
        typeof(ProjectionControl),
        new FrameworkPropertyMetadata("FLAT", OnLabelPropertyChanged));

    private static void OnLabelPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs eventArgs)
    {
        ((Label)FindName("myLabel")).Content = (string)GetValue("LabelProperty");
    }
}

XAML には、次のような簡単な方法があるはずです。

...
<Label Content="{Binding ...point to the Label property... }"/>
...

しかし、私は多くの組み合わせ(RelativeSource/Pah、Source/Path、x:Reference、プロパティ名を書くだけ...)を試しましたが、何も機能しませんでした...

私は WinForms の専門家であり、しばらくの間 WPF を学習していますが、これらのことはまだ私にとって異質です。

4

1 に答える 1

2

Labelプロパティにバインドするだけです

<Label Content="{Binding Label}"/>

DataContextまた、をに設定する必要がある場合がありUserControlますxaml

<UserControl x:Class="WpfApplication10.MyUserControl"
             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" 
             Name="UI"> // Set a name 

    <Grid DataContext="{Binding ElementName=UI}"> //Set DataContext using the name of the UserControl
        <Label Content="{Binding Label}" />
    </Grid>
</UserControl>

完全な例:

コード:

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

    public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
      "Label", typeof(String),typeof(MyUserControl), new FrameworkPropertyMetadata("FLAT"));

    public string Label
    {
        get { return (string)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }
}

Xaml:

<UserControl x:Class="WpfApplication10.MyUserControl"
             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" 
             Name="UI">

    <Grid DataContext="{Binding ElementName=UI}">
        <TextBlock Text="{Binding Label}" />
    </Grid>
</UserControl>
于 2013-04-16T01:21:50.657 に答える