Как стилизовать кнопку на основе свойства окна - PullRequest
1 голос
/ 04 марта 2011

У меня есть простое приложение WPF с окном. Это окно имеет свойство зависимости.

    public static readonly DependencyProperty ShiftProperty;

    static VirtualKeyboard()
    {
        ShiftProperty = DependencyProperty.Register("Shift", typeof(bool), typeof(VirtualKeyboard));
    }

    public bool Shift
    {
        get { return (bool)GetValue(ShiftProperty); }
        set { SetValue(ShiftProperty, value); }
    }

Теперь в этом окне у меня есть кнопка, которую я хочу визуально отобразить, если Shift имеет значение True или нет, применяя стиль.

Я признаю, что не очень опытен в WPF, но считаю, что это можно решить с помощью триггеров данных. Моя проблема в том, чтобы подключить его.

Вот xaml для кнопки.

        <Button Grid.Row="4" Grid.ColumnSpan="2" Grid.Column="0" Command="local:VirtualKeyboard.ShiftButtonPressedCommand" Content="Shift" Name="ShiftButton">
            <Button.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=Shift}" Value="True">
                            <Setter Property="Control.Background" Value="Black">

                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

Я буду признателен за любую помощь, которую смогу получить.

Спасибо, Stefan

1 Ответ

0 голосов
/ 04 марта 2011

Вы правы. Вы можете сделать это с помощью datatriggers. Чтобы это работало, вам нужно установить datacontext вдовы. В противном случае привязка не сможет получить доступ к вашему свойству зависимости.

    public VirtualKeyboard()
    {
        InitializeComponent();
        DataContext = this;
    }

и укажите свой стиль как

 <Button  Grid.Column="0" Content="Shift" Name="ShiftButton">
            <Button.Style>
                <Style>
                    <Setter Property="Button.Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=Shift}" Value="True">
                            <Setter Property="Button.Visibility" Value="Visible">
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
...