【问题标题】:WPF MVVM - Style is lost for items in TreeViewWPF MVVM - TreeView 中项目的样式丢失
【发布时间】:2015-07-23 23:38:33
【问题描述】:

我刚开始使用 WPF,但我遇到了样式问题。 我在UserControl 中为所有TextBlock 使用了一种样式。

<UserControl.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Margin" Value="10" />
    </Style>
</UserControl.Resources>

它适用于第一个 StackPanel 中的 TextBlock,但不适用于 TreeView 中的 TextBlock

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>

    <StackPanel Grid.Row="1" Orientation="Horizontal">
        <TextBlock Text="{Binding Name}" />
        <TextBlock Text="{Binding Description}" />
    </StackPanel>

    <TreeView ItemsSource="{Binding Tests}" Grid.Row="2">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type dml:TestCase}" ItemsSource="{Binding Tasks}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" />
                    <TextBlock Text="{Binding Description}" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <!--Task Template-->
            <HierarchicalDataTemplate DataType="{x:Type dml:Task}">
                <TextBlock Text="{Binding Name}" />
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Grid>

有没有办法在TreeView 中的每个TextBlock 上不设置样式?

【问题讨论】:

  • 对不起,我没有意识到这个问题,请检查这个链接。 msdn.microsoft.com/en-us/library/… 为 TreeViewItem 你想给样式然后你需要给 TreeViewItem 样式。
  • 我想要的只是在同一个 StackPanel 中的 TextBlock 之间的一些边距
  • @felix 我一直在关注您,看看您是否遇到了我可以帮助您解决的问题 - 到目前为止,人们更快地帮助了您 - 感谢您修复我的帖子 ;)

标签: wpf xaml mvvm treeview styles


【解决方案1】:

好的,我们开始吧,

<TreeView ItemsSource="{Binding Tests}" >
        <TreeView.Resources>
            <HierarchicalDataTemplate ItemsSource="{Binding Tasks}" DataType="Hdtable1">
                <StackPanel Orientation="Horizontal">
                    <StackPanel.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Margin" Value="10"/>
                        </Style>
                    </StackPanel.Resources>
                    <TextBlock Text="{Binding Name}" />
                    <TextBlock Text="{Binding Description}" />
                </StackPanel>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="HDTEmplate">
                <TextBlock Text="{Binding Name}" />
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

致谢:- https://stackoverflow.com/a/932609/2470362
https://stackoverflow.com/a/3102188/2470362

【讨论】:

    【解决方案2】:

    只需在您的 ItemTemplate 中执行:

    <HierarchicalDataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Name}" Margin="0,0,10,0" />
            <TextBlock Text="{Binding Description}" />
        </StackPanel>
    </HierarchicalDataTemplate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 2018-02-02
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多