在WPF中的代码中更新样式触发器?

时间:2015-08-11 21:16:58

标签: c# wpf xaml

我有一个带有StackPanel的XAML和里面的各种TextBlocks,我用作菜单:

<StackPanel Width="200" DockPanel.Dock="Left" Background="CornflowerBlue">
<StackPanel.Style>
    <Style TargetType="StackPanel">
        <Style.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Cursor" Value="Hand" />
                <Setter Property="Foreground" Value="White" />

                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Gold" />
                    </Trigger>

                    <Trigger Property="Tag" Value="1">
                        <Setter Property="Foreground" Value="Black" />
                        <Setter Property="Background" Value="WhiteSmoke" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Style.Resources>
    </Style>
</StackPanel.Style>

<TextBlock Padding="10" FontWeight="Bold" FontSize="15" MouseDown="TextBlock_MouseDown">
    <TextBlock.InputBindings>
        <MouseBinding Command="local:MainWindow.UserList" MouseAction="LeftClick" />
    </TextBlock.InputBindings>
    <TextBlock.Text>
        USER LIST
    </TextBlock.Text>
</TextBlock>

<TextBlock Padding="10" FontWeight="Bold" FontSize="15" MouseDown="TextBlock_MouseDown">                    
    <TextBlock.InputBindings>
        <MouseBinding Command="local:MainWindow.Exit" MouseAction="LeftClick" />
    </TextBlock.InputBindings>
    <TextBlock.Text>
        EXIT
    </TextBlock.Text>
</TextBlock>
</StackPanel>

在代码中,我有这个功能:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    (sender as TextBlock).Tag = 1;
    //(sender as TextBlock).Tag = "1"; //Or this
}

如果我在XAML中设置Tag,则样式属性已更新,但如果我在代码中设置了Tag,则不会发生这种情况。我还尝试手动更改代码中的Background / Foreground属性,但我猜测XAML样式会覆盖它。

我正在尝试这样做,以便当用户点击文本块时,背景/前景(或样式所需的任何其他内容)也会更新, 这是一个“选择”菜单选项,但我无法使其正常工作。

是否有任何简单的方法可以在不必编写自定义控件的情况下使其正常工作?

0 个答案:

没有答案