Silverlight 4 中的列表框禁用状态

5

我正在为 ListBox 进行样式设计,现在到了需要对禁用的 ListBox 进行置灰样式的部分。但是当我在 Blend 的“状态”选项卡中查看时,只有“验证状态”,没有通常包括禁用状态的“普通状态”。

我尝试创建一个简单的项目,没有自定义的样式,只有一个 ListBox,但仍然出现相同的情况。我的问题是,如何为 ListBox 设计禁用状态的样式?我是否漏掉了一些明显的东西?


肯定有人知道...或者在意 :( - Darko
很抱歉,我看到了你的帖子,因为我也有同样的问题。我很关心。 :-) - RationalGeek
是的,我能闻到一个Tumbleweed徽章的到来... - Darko
在这个问题上开始悬赏。 - Darko
2个回答

1

首先尝试简单的方法:编辑ListBoxItem模板,而不是List box。显示为禁用状态的是项目,而不是列表框。

在Blend中: “编辑其他模板”>“编辑生成的项容器(ItemContainerStyle)”>编辑副本。

作为测试,我强制将禁用状态下的背景颜色设置为红色(请参见下面的图片)。背景颜色通常从父列表派生。XAML太大了,无法在此列出。

列表框中的项容器包含一个网格,其中包含3个矩形(以提供边框颜色效果)和一个内容容器,用于容纳实际的项目内容。

  • fillcolor
  • fillcolor2
  • contentPresenter
  • FocusVisualElement

Sample output

明显的问题...所有项目下面的空白。呸!一定有更好的方法。

现在尝试改变ListBox模板: 为了改变ListBox本身的模板,我想你可以将ListView模板中的ScrollViewer的背景颜色绑定到控件的IsEnabled属性上。这需要一个自定义值转换器(将IsEnabled bool?转换为Brush对象),但它们非常容易创建。

TemplateBinding不支持转换器,但我发现如果使用RelativeSource,可以在模板中使用普通绑定

<ScrollViewer x:Name="ScrollViewer" BorderBrush="Transparent" BorderThickness="0" Background="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Bool2Color}}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}">

结果看起来像这样:

alt textalt text

The code for the value convertor is below

    public class BoolToColourConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is bool?)
            {
                return new SolidColorBrush((value as bool?).Value ? Colors.Red : Colors.Orange);
            }
            throw new NotImplementedException();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

虽然我用了不同的方法解决了这个问题,但这是一个可行的解决方案。不幸的是,解决这个特定问题没有优雅的方法。 我会在有空闲的时候发布我的解决方案。 - Darko
1
我们期待着看到你的替代方案(正如人们所说,“弦多则声美”)。谢谢。 - iCollect.it Ltd

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接