2

ブール変数が true の場合、ラベルとボタンの背景を変更する必要があります (false の場合はデフォルトの色に戻ります)。だから私は添付プロパティを書きました。これまでのところ、次のようになります。

public class BackgroundChanger : DependencyObject
{
    #region dependency properties
    // status
    public static bool GetStatus(DependencyObject obj)
    {
        return (bool)obj.GetValue(StatusProperty);
    }
    public static void SetStatus(DependencyObject obj, bool value)
    {
        obj.SetValue(StatusProperty, value);
    }
    public static readonly DependencyProperty StatusProperty = DependencyProperty.RegisterAttached("Status",
                     typeof(bool), typeof(BackgroundChanger), new UIPropertyMetadata(false, OnStatusChange));

    #endregion

    private static void OnStatusChange(DependencyObject obj,  DependencyPropertyChangedEventArgs e) 
    {
        var element = obj as Control;
        if (element != null)
        {
            if ((bool)e.NewValue)
                element.Background = Brushes.LimeGreen;
            else
                element.Background = default(Brush);
        }
    }
}

そして、私はそれを次のように使用します:

<Label CustomControls:BackgroundChanger.Status="{Binding test}" />

それは正常に動作します。対応する変数testがビューモデルに設定されると、背景色が に変わりますLimeGreen

私の質問:

LimeGreenはハードコードされています。XAMLでもその色(およびデフォルトの色も)を設定したいと思います。だから、背景がどの2色に切り替わるかを決めることができます。どうやってやるの?

4

2 に答える 2

1

複数の添付プロパティを持つことができます。それらへのアクセスは簡単です。操作したい添付プロパティ値を指定する静的メソッドGet..Set..メソッドがあります。DependencyObject

public class BackgroundChanger : DependencyObject
{
    // make property Brush Background
    // type "propdp", press "tab" and complete filling

    private static void OnStatusChange(DependencyObject obj,  DependencyPropertyChangedEventArgs e) 
    {
        var element = obj as Control;
        if (element != null)
        {
            if ((bool)e.NewValue)
                element.Background = GetBrush(obj); // getting another attached property value
            else
                element.Background = default(Brush);
        }
    }
}

xamlでは次のようになります

<Label CustomControls:BackgroundChanger.Status="{Binding test}"
    CustomControls:BackgroundChanger.Background="Red"/>
于 2014-10-17T13:36:15.367 に答える
1

代わりに DataTrigger を使用しないのはなぜですか?

<Style x:Key="FilePathStyle" TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=AddButton, Path=IsEnabled}" Value="True">
            <Setter Property="Background" Value="#FFEBF7E1" />
        </DataTrigger>

        <DataTrigger Binding="{Binding ElementName=AddButton, Path=IsEnabled}" Value="False">
            <Setter Property="Background" Value="LightYellow" />
        </DataTrigger>
    </Style.Triggers>
</Style>

.
.
.
<TextBox Style="{StaticResource FilePathStyle}" x:Name="filePathControl" Width="300" Height="25" Margin="5" Text="{Binding SelectedFilePath}" />
于 2014-10-17T13:22:50.287 に答える