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的朋友们有点帮助,睡觉……

时间: 2024-10-10 11:05:02

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

svn删除目录后提交显示Item &#39;XXXX&#39; is out of date解决方法

http://www.2cto.com/os/201211/166515.html —————————————————————————————————————————————————————————————— svn删除目录后提交显示Item 'XXXX' is out of date解决方法 1.在要删除的目录上执行 svn 的 Delete  www.2cto.com 2.来到要删除目录的上级目录,执行更新操作. 3.找到要删除的目录,会显示冲突状态,在这个目录上执行Resolved. 4.

join时显示no join predicate原因分析以及解决办法

本位出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据,因为预期很快就可以查询出来结果的SQL,实则半个小时都出不来,后面会有截图 观察执行计划的时候发现中间有一步中出现一个类似如下非常规的连接提示警告,如下图 no join predicate 意思就是没有连接谓词,表之间join的时候没有指定连接谓词可以导致no join predicate, 但是

VS2008+Qt+助手 智能提示不显示、Qt关键字不高亮的解决办法【已解决】

笔者使用的开发环境是VS2008+Qt4.8.5+VAssistX,有时候会出现代码关键字不能高亮显示,并且助手的智能提示不显示.问题如下 解决的办法是在助手的选项中设置其搜索路径,助手的设置通过VS的VAssistX菜单进入,选择最后一个Visual AssistX Options,然后设置Projects标签下的C/C++ Directories,如以下两幅图所示,需要设置src和include,这一步有点类似于在VS的属性中增加include目录,目的是让软件能够找到这些文件 这样设置完之

ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决办法

fragment中添加了button和checkbox这些控件,此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应. 这时候就可以使用descendantFocusability来解决啦,API描述如下: android:descendantFocusability 该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系. 属性的值有三种: beforeDescendants:viewgroup会优先其子类控件而获取到焦点

linux shell中不显示路径了,显示为-bash-4.1#的两种解决办法

出现这个问题的原因是因为没有配置.bash_profile的问题,或者是我们不小心清空或删除了.bash_profile文件. 办法一:修改 ~/.bash_profile文件 步骤如下: vim ~/.bash_profile (不用管.bash_profile这个文件有几个,自己新建一个也是可以的) 在最后加上 export PS1='[\[email protected]\h \W]\$' 然后执行 source ~/.bash_profile 这样shell就可以显示路径了. 方法二:拷

linux 命令行不显示路径了,而显示为-bash-4.1#的两种解决办法

问题描述: linux的命令行界面显示的不是路径,而是-bash-4.1#: 原因分析: 出现这个问题的原因是因为没有配置.bash_profile的问题,或者是我们不小心清空或删除了.bash_profile文件. 解决方法 方法一:修改 ~/.bash_profile文件 1.修改~/.bash_profile文件,在~/.bash_profile文件后面加上一行: export PS1='[\[email protected]\h \W]\$' 如果~/.bash_profile被误删掉了

WPF ContextMenu 在MVVM模式中无法绑定 Command的解决办法

ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 1 public class BindingProxy : Freezable 2 { 3 #region Overrides of Freezable 4 5 protected override Freezable CreateI

android中的textview显示汉字不能自动换行的一个解决办法

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:shrinkColumns="0" > <TableRow android:layout_width=&qu

打开局域网项目,显示“项目位置不受信任”的解决办法(VS2008)

弄了几天,网上搜了个遍,愣是解决不了,绝望的时候闭着眼睛胡搞,居然解决了,哈哈.... 开发环境:visual studio 2008 项目位置:局域网其他电脑内 出现问题: 1.弹出“”的对话框,如果强行跳过则会引发问题2. 2.会出现各种安全性异常的黄页. 解决办法: 1.下载 Microsoft .NET Framework 2.0 软件开发工具包 并安装 2.打开 "SDK 命令提示" 并输入 "mscorcfg.msc" 回车启动 ".NET F