请与我一起讨论Silverlight Designer Gurus,这是对我的评价。
我正在创建一个从Silverlight 3.0 ListBox派生的自定义控件。为了不显示大量代码(最初),让我描述一下设置。
我有一个包含控制逻辑类的类库。然后我有一个包含样式细节的Themes / generic.xaml。在generic.xaml中,我有一个定义默认布局的样式,并查找ListBox,我在其中设置Template,ItemsPanel和ItemTemplate的值。
在我的测试应用中,我将我的控件添加到MainPage.xaml并运行它并且效果很好。我动态地将数据绑定到我的控件,并且工作正常。
现在我想为派生控件设置ItemContainerStyle。如果我在MainPage.xaml文件中创建一个样式并将ItemContainerStyle属性设置为该控件,如下所示:
<dti:myControl x:Name="MyControl1" ItemContainerStyle="{StaticResource MyListBoxItem}"
Height="500"
Width="200"
Margin="10"
Background="AliceBlue"
/>
它按预期工作。
但是,我想在类库中,或者更具体地说,在generic.xaml中执行此操作。我尝试将这个Setter改为我现在的风格:
<Setter Property="ItemContainerStyle">
<Setter.Value>
<ControlTemplate>
<Grid Background="Red" Margin="3">
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
HorizontalAlignment="Stretch" Margin="3"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
它惨遭失败:
“System.ArgumentException:'System.Windows.Controls.ControlTemplate'不是属性'ItemContainerStyle'的有效值。”
注意:这不是我想要用于ItemContainerStyle的实际样式。我实际上是想在这里为一个ListBoxItem的各种选择/未选择状态插入一些VSM(对于动态绑定控件)。
所以,问题是当使用generic.xaml定义时,如何将ItemContainterStyle应用于我的自定义控件?我以后在实际使用控件时不想要该属性设置。
谢谢,
Beaudetious
答案 0 :(得分:2)
您错过了将Style标记放入Setter.Value中。 ItemContainerstyle将样式表示为ListBoxItem(除非您将ListBoxItem子类化为您自己的派生版本。)
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType=”{x:Type ListBoxItem}“ >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Background="Red" Margin="3">
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="Stretch" Margin="3"/>
</Grid>
</ControlTemplate>
<Setter.Value>
</Style>
</Setter.Value>