代码之家  ›  专栏  ›  技术社区  ›  Darko

Silverlight 4中的列表框禁用状态

  •  5
  • Darko  · 技术社区  · 15 年前

    所以我正在设计一个列表框的样式,当列表框被禁用时,我需要做一个灰显的样式。但是,当我在Blend中查看states选项卡时,只显示验证状态—没有包含Disabled状态的常见状态的迹象。

    我尝试创建一个香草项目,没有自定义样式,只有一个列表框,同样的事情也发生了。我的问题是,如何为列表框设置禁用状态的样式?我是不是漏掉了什么明显的东西??

    2 回复  |  直到 15 年前
        1
  •  1
  •   iCollect.it Ltd    15 年前

    首先尝试了简单的方法:

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

    列表框中的项目容器由一个包含3个矩形(提供边框颜色效果)的网格和一个包含实际项目内容的内容容器组成。

    • 填充颜色
    • 内容演示者
    • 焦点可视元素

    Sample output

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

    TemplateBinding不支持转换器 但我发现你 can use a normal binding in a template, if you use a 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 text alt 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();
            }
        }
    
        2
  •  1
  •   Klinger    15 年前

    ListBox是一个嵌套控件。

    以下两个链接解释如何设置列表框的样式。它们不是你问题的直接答案,但它们可能会让你对它的工作原理有一些了解。

    http://www.codeproject.com/KB/expression/ListBoxStylingSilverlight.aspx http://www.codeproject.com/KB/expression/ListBoxStylingPart2.aspx