我有一个问题,似乎很多其他人以前有过。我尝试使用一个样式,它包含几个控件的GridView。
我在网上搜索了答案并得到了两个解决方案:
我尝试了两种解决方案(即使是在同一时间),但只要我将样式应用于第二个控件,错误仍然会出现。
样式看起来像这样
<Style x:Key="MyCustomStyle" TargetType="{x:Type MyUserControl}" BasedOn="{StaticResource MyUserControlBaseStyle}">
<Setter Property="Watermark" Value="{x:Static LabelResources.Caption}"/>
<Setter Property="ErrorText" Value="{Binding Converter={StaticResource FormatStringConverter}, ConverterParameter={x:Static LabelResources.Caption}}"/>
<Setter Property="LookupTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type LookupResult}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Margin="0,0,2,0"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="SuggestionsView" Value="{DynamicResource CustomGridView}"/>
</Style>
这里是GridView
<GridView x:Key="CustomGridView" x:Shared="False">
<GridViewColumn Header="{x:Static resources:LabelResources.Name}" Width="Auto" HeaderContainerStyle="{DynamicResource GridViewHeaderStyle}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Left"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
我该怎么办?
答案 0 :(得分:3)
听起来您只创建了一个CustomGridView
个实例,并且您正在尝试将其分配到多个位置,这会导致异常。
在WPF中,x:Shared仅在以下条件下有效:
包含x:Shared项目的ResourceDictionary必须编译。 ResourceDictionary不能在松散的XAML中使用或使用 主题。
包含项目的ResourceDictionary不得嵌套在另一个ResourceDictionary中。例如,你不能使用 x:在StyleDictionary中的一个Style内共享 已经是ResourceDictionary项目。
我不完全确定成为Compiled ResourceDictionary的含义,但您可以尝试将Build Action更改为Page而不是Resource,例如this answer suggests。
如果你无法获得x:共享工作,那么可以考虑将SuggestionsView
设为ContentTemplate
或DataTemplate
,以便每次使用它都会创建自己的GridView。
<ContentTemplate x:Key="CustomGridView">
<GridView>
<GridViewColumn Header="{x:Static resources:LabelResources.Name}" Width="Auto" HeaderContainerStyle="{DynamicResource GridViewHeaderStyle}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Left"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ContentTemplate>