Wpf 查看can';不能由多个Listview共享
我有一个问题,很多人以前都有过。我尝试使用一种样式,它包含由多个控件组成的GridView 我在网上搜索答案,得到了两个解决方案:Wpf 查看can';不能由多个Listview共享,wpf,listview,styles,share,Wpf,Listview,Styles,Share,我有一个问题,很多人以前都有过。我尝试使用一种样式,它包含由多个控件组成的GridView 我在网上搜索答案,得到了两个解决方案: 使用DynamicResource更改StaticResource 在GridView上使用x:shared=“False” 我尝试了两种解决方案(即使是同时尝试),但当我将样式应用于第二个控件时,错误仍然会出现 样式看起来像这样 <Style x:Key="MyCustomStyle" TargetType="{x:Type MyUserControl}
- 使用DynamicResource更改StaticResource
- 在GridView上使用x:shared=“False”
<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>
我能做什么?听起来您只创建了一个
CustomGridView
实例,并且您试图将其分配到多个位置,这导致了异常
根据
在WPF中,x:Shared仅在以下条件下有效:
- 必须编译包含x:Shared项的ResourceDictionary。ResourceDictionary不能在松散的XAML中或已使用 主题
- 包含这些项的ResourceDictionary不能嵌套在其他ResourceDictionary中。例如,您不能使用 x:为样式中的ResourceDictionary中的项共享 已是ResourceDictionary项
如果不能获得X:共享工作,则可以考虑制作<代码>建议>视图> />代码>代码>内容模板< /代码>或<代码>数据板< /代码>,因此每次使用它将创建它自己的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>
你好,瑞秋。x:shared=“false”的目的不是创建GridView的新实例吗?SuggestionView基本上是一个从GridView派生的类,具有一些额外的功能,允许我添加动态创建的列。@StefanG是的,但它仅在对象位于已编译的ResourceDictionary中时才起作用。如果它是松散的XAML或在另一个嵌套字典中,它将不起作用。您的设置如何?我有一个ResourceDictionary,其中包含此控件的所有样式。“编译”是什么意思?使用ResourceDictionaries时是否有特殊的选项,或者这是正常的行为?@StefanG我认为它需要作为一个单独的文件进行编译。我只是在阅读:x:Shared的底部,它仅在以下条件下有效:a)必须编译包含x:Shared项的ResourceDictionary。ResourceDictionary不能位于松散的XAML中,也不能用于主题。b) 包含这些项的ResourceDictionary不能嵌套在另一个ResourceDictionary中。@请验证ResourceDictionary的生成操作是否设置为Page而不是Resource,如本回答中所述?