Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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 将样式从资源应用到ListView.ItemContainerStyle_Wpf_Xaml - Fatal编程技术网

Wpf 将样式从资源应用到ListView.ItemContainerStyle

Wpf 将样式从资源应用到ListView.ItemContainerStyle,wpf,xaml,Wpf,Xaml,我在VS 2012中与XAML/WPF合作。我承认我还不太了解模板和样式 我在application.xaml文件中定义了如下样式: <Style x:Key="ContactGroups" TargetType="ListViewItem"> <!-- Styling omitted here --> </Style> 现在我想把这个样式应用到我的列表视图中,但是我不知道在哪里应用这个样式,也就是说,在哪里放置设置样式的代码。为了缩短时间,我省

我在VS 2012中与XAML/WPF合作。我承认我还不太了解模板和样式

我在application.xaml文件中定义了如下样式:

<Style x:Key="ContactGroups" TargetType="ListViewItem">
    <!-- Styling omitted here -->
</Style>

现在我想把这个样式应用到我的列表视图中,但是我不知道在哪里应用这个样式,也就是说,在哪里放置设置样式的代码。为了缩短时间,我省略了很多属性:

<ListView ItemsSource="{Binding Groups}" SelectedItem="{Binding Path=SelectedGroup, Mode=OneWayToSource}" >
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Width="140" Height="25">
                <Grid.RowDefinitions>
                    <RowDefinition Height="2*" />
                </Grid.RowDefinitions>
                <Label Content="{Binding Name}" ToolTip="{Binding Name}" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

使用标记扩展设置ListBox的
ItemContainerStyle
上的样式:

<ListView ItemsSource="{Binding Groups}"
          SelectedItem="{Binding Path=SelectedGroup, Mode=OneWayToSource}"
          ItemContainerStyle="{StaticResource ContactGroups}" >

我不确定您是否只想将此样式应用于此列表,但如果不想,您可以从样式中删除
x:Key=“ContactGroups”
,并将其应用于所有列表项

如果您希望仅针对此listview,则可以选择将样式添加到列表视图的资源中:

    <ListView ItemsSource="{Binding Groups}" SelectedItem="{Binding Path=SelectedGroup, Mode=OneWayToSource}" >
        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <!-- Styling omitted here -->
            </Style>
        </ListView.Resources>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Width="140" Height="25">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="2*" />
                    </Grid.RowDefinitions>
                    <Label Content="{Binding Name}" ToolTip="{Binding Name}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

编辑:根据您在下面的评论,这可能是您想要采取的方法:

<ListView.Resources>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource ContactGroups}" />
</ListView.Resources>


这样,您的样式将保持在App.xaml中定义。

运行和编译时不会出现错误,但我的样式没有得到应用。我真的不明白怎么会这样。当获取正在使用的颜色的十六进制数并在我的XAML(或整个应用程序)中搜索它们时,颜色不会出现在任何地方。我怀疑你的答案是正确的,我还有其他一些问题。是的,关于你发布的问题。这就是你实现它的方式。不确定你的其他问题。考虑在你的风格中打开另一个问题的细节,这样它可以被更多的人看到。我认为这可能是一个赢8。请看我的新帖子:谢谢,我想这可能会为我指明正确的方向。我想知道我是否有另一个“全局”风格应用于我的列表,导致了我在上面的评论中提到的问题。谢谢你关于使用当地资源的建议。实际上,我现在正试图将我的样式从xaml窗口中移出,因为该窗口变得太复杂且难以阅读。那样的话,我还有一个选择,你可能更喜欢。我会把它加在上面。