4

データ トリガーとして使用したいカスタム依存関係プロパティがあります。コードビハインドは次のとおりです。

public static readonly DependencyProperty BioinsulatorScannedProperty =
    DependencyProperty.Register(
        "BioinsulatorScanned", 
        typeof(bool), 
        typeof(DisposablesDisplay), 
        new FrameworkPropertyMetadata(false));

    public bool BioinsulatorScanned
    {
        get
        {
            return (bool)GetValue(BioinsulatorScannedProperty);
        }
        set
        {
            SetValue(BioinsulatorScannedProperty, value);
        }
    }

スタイルとコントロールのテンプレートを作成しました。私の目標は、依存関係の小道具がtrueに設定されているときに、テキストの色を変更することです...

<Style x:Key="TreatEye" TargetType="Label">
        <Setter Property="Foreground" Value="#d1d1d1" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="FontSize" Value="30" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Canvas>                            
                        <TextBlock x:Name="bioinsulatorText" 
                                   Canvas.Left="21" Canvas.Top="33" 
                                   Text="Bioinsulator" />
                        <TextBlock Canvas.Left="21" Canvas.Top="70" 
                                   Text="KXL Kit" />
                    </Canvas>

                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding BioinsulatorScanned}"
                                     Value="True">
                            <Setter TargetName="bioinsulatorText" 
                                    Property="Foreground" Value="Black" />
                        </DataTrigger>
                    </ControlTemplate.Triggers>

                </ControlTemplate>
            </Setter.Value>
        </Setter>            
    </Style>

プログラムで依存関係プロップを true に正常に設定したにもかかわらず、このトリガー条件が発生することはありません。これはデバッグするのが本当に苦痛です!

前もって感謝します。

4

2 に答える 2

4

この場合、依存関係プロパティ FirstLevelProperty に基づくデータトリガーを使用して、ボタンの可視性を切り替えています。

public static readonly DependencyProperty FirstLevelProperty = DependencyProperty.Register("FirstLevel", typeof(string), typeof(MyWindowClass));

public string FirstLevel
        {
            get
            {
                return this.GetValue(FirstLevelProperty).ToString();
            }

            set
            {
                this.SetValue(FirstLevelProperty, value);
            }
        }

バインディングFirstLevel(Property)を使用して、ウィンドウに含まれる (この場合)依存関係プロパティを参照できます。RelativeSourceまた、データトリガーによって上書きされるスタイルのデフォルト設定を設定する必要があります。

<Button.Style>
    <Style TargetType="Button">
        <Style.Triggers>
            <DataTrigger 
             Binding="{Binding Path=FirstLevel,
             RelativeSource={RelativeSource FindAncestor,
             AncestorType={x:Type Window}}}" 
             Value="SomeValue">
                <Setter Property="Visibility" 
                 Value="Hidden" />
             </DataTrigger>
        </Style.Triggers>
        <Setter Property="Visibility" Value="Visible" />
    </Style>
</Button.Style>
于 2012-02-01T00:43:31.673 に答える