意外地解决了一个WPF布局问题

简介: 原文:意外地解决了一个WPF布局问题今天做了一个小测试,意外地将之前的一个困扰解决了,原问题见《WPF疑难杂症会诊》中的“怎么才能禁止内容撑大容器?” 以前我是在外侧嵌套Canvas容器来解决的,这样实际上就是强制舍去了溢出部分,如果想实现多余的文字转变为省略号就办不到了,而且渐变的结束点也是随内容扩展到容器外面了。
原文: 意外地解决了一个WPF布局问题

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

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

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

 

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.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的边框~不知道是怎么回事。

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

 

目录
相关文章
|
11月前
|
C# UED 开发者
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
894 1
|
11月前
|
开发者 C# Windows
WPF布局大揭秘:掌握布局技巧,轻松创建响应式用户界面,让你的应用程序更上一层楼!
【8月更文挑战第31天】在现代软件开发中,响应式用户界面至关重要。WPF(Windows Presentation Foundation)作为.NET框架的一部分,提供了丰富的布局控件和机制,便于创建可自动调整的UI。本文介绍WPF布局的基础概念与实现方法,包括`StackPanel`、`DockPanel`、`Grid`等控件的使用,并通过示例代码展示如何构建响应式布局。了解这些技巧有助于开发者优化用户体验,适应不同设备和屏幕尺寸。
360 0
WPF-布局样式练习-Day02-聊天气泡
WPF-布局样式练习-Day02-聊天气泡
378 1
|
前端开发 C# 索引
浅谈WPF之UI布局
一个成功的软件,离不开人性化的UI设计,如何抓住用户第一视觉,让用户产生依赖感,合适优雅的布局必不可少。本文以一些简单的小例子,简述WPF中布局 面板 控件的使用,仅供学习分享使用,如有不足之处,还请指正。
227 1
|
前端开发 C# 容器
WPF技术之控件布局
WPF提供了多种布局控件和技术,可以帮助开发人员轻松创建灵活的用户界面。
234 0
WPF技术之控件布局
WPF-布局样式练习-Day01
WPF-布局样式练习-Day01
184 0
|
C#
[WPF] VisualBrush 中的布局
原文:[WPF] VisualBrush 中的布局 今天插一篇随笔。说一说上周五遇到的一个布局问题,问题大概是这样的:需要在一个快区域上添加一张透明的背景图片,由于区域较大、并且宽高都不是固定大小,图片较小 所以图片需要居中显示。
1013 1
|
算法 C#
WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
原文:WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
1151 0
|
前端开发 C#
WPF编游戏系列 之一 布局设计
原文:WPF编游戏系列 之一 布局设计        本系列主要使用WPF和C#编写一个简单的小游戏(暂命名XMarket),意在通过该实例进一步学习和体验WPF,也欢迎广大同仁拍砖交流。言归正传,在编写一个软件前首先要思考软件的结构与布局,图片放在哪,按钮放在哪,都要先设计一下。
682 0