2

Iの場合、次のようUserControlに宣言しましたDependencyProperty

        public static readonly DependencyProperty DeselectedPresentationModeProperty =
        DependencyProperty.Register(
        "DeselectedPresentationMode",
        typeof(int),
        typeof(MyUserControl),
        new FrameworkPropertyMetadata(1,FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public static readonly DependencyProperty SelectedPresentationModeProperty =
        DependencyProperty.Register(
        "SelectedPresentationMode",
        typeof(int),
        typeof(MyUserControl),
        new FrameworkPropertyMetadata(1, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

ここで、MultiTrigger 内でこれらのプロパティを使用したいと考えています。

    <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}" x:Key="MyUserControlItemStyle">
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsSelected" Value="False" />
                    <Condition Property="gui:MyUserControl.DeselectedPresentationMode" Value="0" />
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
                </MultiTrigger.Setters>
            </MultiTrigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsSelected" Value="False" />
                    <Condition Property="gui:MyUserControl.DeselectedPresentationMode" Value="1" />
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="ContentTemplate" Value="{StaticResource PresentationModeSimple}" />
                </MultiTrigger.Setters>
            </MultiTrigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsSelected" Value="True" />
                    <Condition Property="gui:MyUserControl.SelectedPresentationMode" Value="0" />
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="ContentTemplate" Value="{StaticResource PresentationModeExtended}" />
                </MultiTrigger.Setters>
            </MultiTrigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsSelected" Value="True" />
                    <Condition Property="gui:MyUserControl.SelectedPresentationMode" Value="1" />
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
                </MultiTrigger.Setters>
            </MultiTrigger>
        </Style.Triggers>
    </Style>
    ...
    ...
    <ListBox ... ItemContainerStyle="{StaticResource MyUserControlItemStyle}"/>

しかし、MyUserControl を別のプロジェクトで使用している場合、自分の を変更しても反応はありませんDependencyProperty。私が使用するかどうかxaml

<Window 
...
x:Class="WpfControlsTester.MainWindow" 
Title="MainWindow">
<Grid>
    <GUI:MyUserControl Name="test"/>
    <Slider Minimum="0" Maximum="1" Value="{Binding SelectedPresentationMode, ElementName=test}" />
    <Slider Minimum="0" Maximum="1" Value="{Binding DeselectedPresentationMode, ElementName=test}" />
</Grid>

this.test.DeselectedPresentationMode = 0;または、イベントなどのような値の操作を使用する場合 。

WPF インスペクターを使用してトリガーを「デバッグ」しましたが、両方のプロパティは常にデフォルト値 (1) でした。私の間違いはどこですか、またはトリガーを更新するには何を追加する必要がありますか?

編集: false "MyControl" を "MyUserControl" に変更しました

4

2 に答える 2

2

プロパティの変更を取得するために、代わりに次のように MultiDatatrigger を試すことができます。

<Style.Triggers>
                <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="False" />
                        <Condition Binding="{Binding DeselectedPresentationMode, RelativeSource={RelativeSource AncestorType={x:Type MyUserControl}}}" Value="0" />
                        </MultiDataTrigger.Conditions>
                            <MultiDataTrigger.Setters>
                        <Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
                        </MultiDataTrigger.Setters>
                </MultiDataTrigger>
            </Style.Triggers>

ありがとう

于 2013-09-04T12:03:19.500 に答える
1

これ単にコピー アンド ペースト エラーである可能性がありますが、 を宣言するコード例ではDependency Properties、コントロールの名前MyUserControlは ですが、他のコード例では と呼ばれていMyControlます。これを機能させるには、これらの名前が一致する必要があります。

更新 >>>

わかりました、そうかもしれないと思いました...では、先に進みます...単純にバインドすると、プロパティの値を確認できますか?

<TextBlock Text="{Binding SelectedPresentationMode, ElementName=test}" />

可能であれば、先に進むことができます... 通常、バインドが機能しない場合、Visual Studio でErroroutput intoという単語で始まる行があります。Output Windowあなたのエラーは何を言っていますか。持っている場合は?( [ツール] > [オプション] > [デバッグ] > [出力ウィンドウ] > [WPF トレース設定] に移動し、オプションをまたはに設定して、この機能を有効にする必要がある場合があります。)Data BindingWarningError

出力ウィンドウにエラーがない場合は、デバッグが難しくなる可能性があります。お知らせ下さい。

于 2013-09-04T11:48:53.743 に答える