WPF:Style ListBoxItem用于统一颜色

时间:2011-03-15 20:20:11

标签: wpf list styles pixelsense

我开始在触摸设备上进行WPF开发。虽然.NET和WPF似乎是一项了不起的技术,但我有点失落。

我正在开发一个通用控件。我定义了一个UserControl,它包含一个Grid,一些按钮和一个SurfaceListBox。在实际的C#-code中,我通过操作listItems-Attribute来处理事件并将新元素添加到列表框中。到目前为止,此工作正常。

现在我想改变列表项的样式 - 如果没有选择它们,我想让它们的背景透明,如果它们是,则我们想要完全变白。不幸的是,下面这段代码根本不起作用。它只是将列表项 text 的背景颜色设置为白色,而不是整个项目。

更新:现在可以了!

<UserControl x:Class="SGEditor.MyControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         xmlns:my="http://schemas.microsoft.com/surface/2008" UseLayoutRounding="True">
<UserControl.Resources>
    <Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
        <Setter Property="Background" Value="Transparent" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Grid>        
    <my:SurfaceListBox Width="300" Height="300" />
</Grid>
</UserControl>

谢谢!

汉斯

1 个答案:

答案 0 :(得分:1)

我不确切知道如何做你想做的事,但我很确定你不能重新分配静态系统值,就像你在x:Key中尝试做的那样。这只是用于稍后在xaml中引用资源的名称,如MyBackgroundColor或其他。

我认为您需要做的是在控件样式中使用触发器,为要更改的元素设置适当的属性。希望其他人能够更多地了解这一点,因为我很少做那些花哨的事情。 =)