0

IsFooBar1 と IsFooBar2 の 2 つのプロパティが添付された非常に単純なカスタム コンテナー コントロール CustomDock があるとします。IsFooBar2 を設定すると IsFooBar1 の値が変更されたときに IsFooBar1 の値が更新される場合、Visual Studio が IsFooBar1 の値に対して生成された xaml を更新するようにするにはどうすればよいですか。

カスタム コントロール:

    public class CustomDock : DockPanel
    {
    public static readonly DependencyProperty IsFooBarProperty1 = DependencyProperty.RegisterAttached(
      "IsFooBar1",
      typeof(Boolean),
      typeof(CustomDock),
      new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
    );

    public static void SetIsFooBar1(UIElement element, Boolean value)
    {
        element.SetValue(IsFooBarProperty1, value);
    }

    public static Boolean GetIsFooBar1(UIElement element)
    {
        return (Boolean)element.GetValue(IsFooBarProperty1);
    }

    public static readonly DependencyProperty IsFooBarProperty2 = DependencyProperty.RegisterAttached(
      "IsFooBar2",
      typeof(Boolean),
      typeof(CustomDock),
      new PropertyMetadata(false)
    );

    public static void SetIsFooBar2(UIElement element, Boolean value)
    {
        element.SetValue(IsFooBarProperty2, value);
        element.SetValue(IsFooBarProperty1, value);

    }

    public static Boolean GetIsFooBar2(UIElement element)
    {
        return (Boolean)element.GetValue(IsFooBarProperty2);
    }

}

そしてxamlでの使用:

<Window x:Class="TestAttachedIndirectProperties.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:my="clr-namespace:TestAttachedIndirectProperties">
<Grid>
    <my:CustomDock Height="100" HorizontalAlignment="Left" Margin="138,123,0,0" x:Name="customDock1" VerticalAlignment="Top" Width="200">
        <Button Content="Button" Height="23" Name="button1" Width="75" my:CustomDock.IsFooBar1="True" my:CustomDock.IsFooBar2="True" />
    </my:CustomDock>
</Grid>

Visual Studio の設計中に、IsFooBar2 が false に変更された場合、IsFooBar1 にも false の値を指定する必要がありますが、プロパティ ペインまたは xaml コードではそうではありません。

4

1 に答える 1

1

WPF は、Dependency プロパティ セッターが呼び出されることを保証しません (奇妙なことに) 依存プロパティを設定する場合は、プロパティ定義を介して OnPropertyChanged コールバックを登録し、そこにカスケード ロジックを配置する必要があります。

于 2012-07-06T11:40:19.450 に答える