Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 查看can';不能由多个Listview共享_Wpf_Listview_Styles_Share - Fatal编程技术网

Wpf 查看can';不能由多个Listview共享

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}

我有一个问题,很多人以前都有过。我尝试使用一种样式,它包含由多个控件组成的GridView

我在网上搜索答案,得到了两个解决方案:

  • 使用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项

我不确定编译后的ResourceDictionary意味着什么,但您可以尝试将构建操作更改为Page而不是Resource,如

如果不能获得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,如本回答中所述?