博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
意外地解决了一个WPF布局问题
阅读量:5896 次
发布时间:2019-06-19

本文共 2309 字,大约阅读时间需要 7 分钟。

原文:

今天做了一个小测试,意外地将之前的一个困扰解决了,原问题见中的“怎么才能禁止内容撑大容器?”

以前我是在外侧嵌套Canvas容器来解决的,这样实际上就是强制舍去了溢出部分,如果想实现多余的文字转变为省略号就办不到了,而且渐变的结束点也是随内容扩展到容器外面了。

现在改良为下面这段代码,就达到了很好的效果:

 

ContractedBlock.gif
ExpandedBlockStart.gif
Code
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   
<Page.Resources>
      
<Style TargetType="ListBoxItem">
         
<Setter Property="Template">
            
<Setter.Value>
               
<ControlTemplate TargetType="ListBoxItem">
                  
<Border>
                     
<Border.Background>
                        
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                           
<GradientStop Offset="0" Color="OrangeRed"/>
                           
<GradientStop Offset="1" Color="Brown"/>
                        
</LinearGradientBrush>
                     
</Border.Background>
                     
<TextBlock Text="{TemplateBinding Content}" TextTrimming="CharacterEllipsis"/>
                  
</Border>
               
</ControlTemplate>
            
</Setter.Value>
         
</Setter>
      
</Style>
      
<Style TargetType="ListBox">
         
<Setter Property="Template">
            
<Setter.Value>
               
<ControlTemplate>
                  
<ScrollViewer BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                     
<Viewbox VerticalAlignment="Top">
                        
<StackPanel Width="{TemplateBinding Width}" IsItemsHost="True"/>
                     
</Viewbox>
                  
</ScrollViewer>
               
</ControlTemplate>
            
</Setter.Value>
         
</Setter>
      
</Style>
   
</Page.Resources>
   
<WrapPanel>
      
<ListBox
         
Width="120"
         Height
="220"
         Margin
="8"
         BorderBrush
="Blue"
         BorderThickness
="3"
         HorizontalContentAlignment
="Stretch">
         
<ListBoxItem>1111111111
         
</ListBoxItem>
         
<ListBoxItem>22222222222222222222
         
</ListBoxItem>
         
<ListBoxItem>333333333333333333333333333333333333
         
</ListBoxItem>
         
<ListBoxItem>44444444444444444444444444444444444444444
         
</ListBoxItem>
      
</ListBox>
      
<ListBox
         
Width="180"
         Height
="220"
         Margin
="8"
         BorderBrush
="Green"
         BorderThickness
="3"
         HorizontalContentAlignment
="Stretch">
         
<ListBoxItem>1111111111
         
</ListBoxItem>
         
<ListBoxItem>22222222222222222222
         
</ListBoxItem>
         
<ListBoxItem>333333333333333333333333333333333333
         
</ListBoxItem>
         
<ListBoxItem>44444444444444444444444444444444444444444
         
</ListBoxItem>
      
</ListBox>
   
</WrapPanel>
</Page>

 

效果:

在这里我为ListBox也重定义了一个模板,为其ListBoxItem宿主容器StackPanel设置了宽度绑定,到这里仍然无法解决问题,过宽的内容还是毫不客气地超出容器宽度,并带出横向滚动条。

然后我又在StackPanel外围加了一个ViewBox,问题就被神奇地解决了,而我自己还是一头雾水~~

另外随之而来了一个新问题,看我在模板里设置了边框的绑定属性:“<ScrollViewer BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">”,在ListBox的定义处也曾为它们制定过不同颜色的3像素边框,但是这不起作用了,怎么设置都看不到ListBox的边框~不知道是怎么回事。

谁能解释一下灵异现象么~

 

你可能感兴趣的文章
使用UITableView实现图片视差效果
查看>>
CentOS RHEL 安装 Tomcat 7
查看>>
Apple Developer Registration and DUNS Number Not Accepted
查看>>
Hadoop学习笔记系列文章导航
查看>>
转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】...
查看>>
iOS开发-NSOperation与GCD区别
查看>>
扩展方法使用
查看>>
Win7 64位 php-5.5.13+Apache 2.4.9+mysql-5.6.19 配置
查看>>
不同页面之间实现参数传递的几种方式讨论
查看>>
程序员进阶之路—如何独当一面
查看>>
SpringMVC中ModelAndView addObject()设置的值jsp取不到的问题
查看>>
Prometheus : 入门
查看>>
使用 PowerShell 创建和修改 ExpressRoute 线路
查看>>
PHP如何学习?
查看>>
谈教育与成长
查看>>
jni c++
查看>>
在C#中获取如PHP函数time()一样的时间戳
查看>>
Redis List数据类型
查看>>
大数据项目实践(四)——之Hive配置
查看>>
Thread类源码解读(1)——如何创建和启动线程
查看>>