wpf的treeview显示item时候不能stretch的一个解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf的treeview显示item时候不能stretch的一个解决办法相关的知识,希望对你有一定的参考价值。

      最近在帮朋友用wpf实现一个功能的时候遇到了treeviewitem总是默认最短的问题(对于我这次的功能是个问题),而且发现在网上很难找到解决办法(挺难的,网上找样式的时候还得要试一试,尤其是刚开始的时候,我真的看不懂wpf的样式代码……,真的跟摸着石头过河的赶脚,这个地方建议还是懵逼状态的朋友用一下blend,会有帮助,就是blend有时候安装的时候可能直接不能用,自己这边好像是把blend的一个开发包删了之后莫名其妙的能用了)。但是写代码有时候就是灵光一闪的事情,就在我踏破铁鞋google还有在其他的英文网站也找不到答案的时候,眼睛扫到代码里的一个单词:Auto。

      默认最短,不就是textblock的宽度是自适应的吗?就在这个时候我就觉得貌似我找到问题的症结了,于是开始看代码(一开始只是眼睛扫到了,我也不知道auto在哪……),无关项去掉之后如下:

 <Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TreeViewItem}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition MinWidth="19" Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition/>
                            </Grid.RowDefinitions>
                            <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{TemplateBinding IsExpanded}" Style="{StaticResource ExpandCollapseToggleStyle}" IsEnabled="False" Visibility="Collapsed" d:IsHidden="True" HorizontalContentAlignment="Stretch"/>
                            <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                                <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </Border>
                            <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

      创建这个style的原因是为了让treeview默认全部展开,然而以上的代码段是自动生成的,而我没有做任何更改,该style传给treeview的ItemContainerStyle。可以看到默认这个grid被分为三列了,第一列是treeview的折叠按钮,第二列是我们的HierarchicalDataTemplate所展现的位置ContentPresenter,而它是Auto的……

    发现了这个之后我就把这个第二列去掉了,itemhosts的ColumSpan=2去掉之后,发现treeview是满屏的了,问题解决了。

    希望对不太了解wpf的朋友们有点帮助,睡觉……

以上是关于wpf的treeview显示item时候不能stretch的一个解决办法的主要内容,如果未能解决你的问题,请参考以下文章

简单的通用TreeView(WPF)

wpf中的treeview如何增加2级节点?在C#中如何添加?

wpf中如何使用代码设置属性Foreground,或者说设置控件字体颜色。

wpf treeview中动态创建的treeViewItem如何用右键触发菜单?

delphi treeview 和 combobox问题 怎样能存两个值一个显...

c#的winform TreeView控件中,展开不同的节点,右边显示不同的内容,该怎么做啊,请帮帮我吧,谢谢~