0

次の XAML を含む UserControl があります。

<GroupBox>
    <Grid>
        <Button x:Name="btn" Content="Test"/>
        <TextBlock x:Name="txt" Visibility="Collapsed"/>
    </Grid>
</GroupBox>

次のコードを使用して、列挙型の DependencyProperty を追加しました。

public static readonly DependencyProperty DisplayTypeProperty = DependencyProperty.Register("DisplayType", typeof(DisplayTypeEnum), typeof(myUserControl), new PropertyMetadata(default(DisplayTypeEnum.Normal)));

    public DisplayTypeEnum DisplayType
    {
        get
        {
            return (DisplayTypeEnum)this.Dispatcher.Invoke(DispatcherPriority.Background, (DispatcherOperationCallback)delegate
            { return GetValue(DisplayTypeProperty); }, DisplayTypeProperty);

        }
        set
        {
            this.Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate
            { SetValue(DisplayTypeProperty, value); }, value);
        }
    }

ここで、DependencyProperty に基づいて両方のコントロールの可視性を設定できるようにしたいと考えています。

すでに次のトリガーを追加しようとしましたが、3 つのエラーが発生します。

<UserControl.Triggers>
<Trigger Property="DisplayType" Value="Text">
            <Setter Property="Visibility" TargetName="btn" Value="Collapsed"/>
            <Setter Property="Visibility" TargetName="txt" Value="Visible"/>
</Trigger>
</UserControl.Triggers>

最初のエラーは、メンバー "DisplayType" が認識されていないか、アクセスできないことを示しています。他の 2 つは、コントロール (txt と btn) が認識されていないことを示しています。私は何を間違っていますか?

前もって感謝します!

4

1 に答える 1

2

コールバックを使用できます

public static readonly DependencyProperty DisplayTypeProperty = DependencyProperty.Register("DisplayType", typeof(DisplayTypeEnum), typeof(myUserControl), new PropertyMetadata(YourDPCallBack));

private static void YourDPCallBack(DependencyObject instance, DependencyPropertyChangedEventArgs args)
{
     YourUserControl control =   (YourUserControl)instance;
     // convert your Display enum to visibility, for example: DisplayType dT = args.NewValue
     // Or do whatever you need here, just remember this method will be executed everytime
     // a value is set to your DP, and the value that has been asigned is: args.NewValue
     // control.btn.Visibility = dT;
     // txt.Visibility = dT;
}

お役に立てば幸いです。

よろしく

于 2012-07-26T13:06:31.320 に答える