c# – 为什么ClipToBounds = false不起作用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么ClipToBounds = false不起作用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2315字,纯文字阅读大概需要4分钟。
内容图文
![c# – 为什么ClipToBounds = false不起作用?](/upload/InfoBanner/zyjiaocheng/819/7a62daff392744fdb5fd923dc1391a98.jpg)
我不想剪切文本块的文本.出于这个原因,我将viewBox.ClipToBounds设置为false,但它不起作用.
请告诉我为什么ClipToBounds = false在这段代码中不起作用:
private void Btn1_Click(object sender, RoutedEventArgs e)
{
Button button = new Button(); button.Background = Brushes.Red;
button.Width = 70; button.Height = 20;
Canvas.SetLeft(button, 100); Canvas.SetTop(button, 120);
button.Padding = new Thickness(1);
StackPanel stackPanel = new StackPanel();
Viewbox viewBox = new Viewbox();
viewBox.ClipToBounds = false;
Canvas canvas = new Canvas();
canvas.Width = button.Width; canvas.Height = button.Height;
TextBlock textBlock = new TextBlock();
textBlock.Text = "this is a test";
textBlock.FontSize = 15;
textBlock.FontFamily = new FontFamily("Arial");
textBlock.TextWrapping = TextWrapping.NoWrap;
textBlock.Foreground = Brushes.Green;
textBlock.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
textBlock.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
viewBox.Height = 20;
textBlock.IsHitTestVisible = false;
stackPanel.Children.Add(viewBox);
viewBox.Child = canvas;
canvas.Children.Add(textBlock);
button.Content = stackPanel;
Canvas MainCanvas = new Canvas();
MainCanvas.Children.Add(button);
this.Content = MainCanvas;
}
Screenhsot:
下面的截图是我想要的. :
解决方法:
默认情况下,ClipToBounds为false.但是,由于某些元素执行布局的方式,剪切仍然可能发生.基本上WPF中的工作方式是设置ClipToBounds = true会强制剪切内容.将其设置为false意味着WPF根据度量约束确定事物的剪切方式并安排rects.
如果你看一下FrameworkElement中的ArrangeCore和MeasureCore方法,你会发现有很多逻辑决定是否应该剪辑某些东西.当然,覆盖FrameworkElement的东西可以随意呈现,但通常他们会遵守基类建立的裁剪规则.
在TextBlock的情况下,如果文本的大小受到限制,它肯定会剪切超出其边界的文本.您可以通过简单地在其上设置宽度,或者将其放置在其上设置宽度的父级来查看.
如果您确实需要在控件的边界之外渲染文本,则可能需要考虑编写自定义文本呈现元素之类的内容.
即使这样,只要你把它放在剪辑的其他东西上,它仍然会被它的父母剪掉.所以,你仍然可能最终陷入困境.
您可以尝试将TextBlock放在按钮的顶部而不是在其内部,并设置其位置以使其在正确的位置(可能通过将其绑定到某些东西).这可行,但如果你需要做太多,可能会很难管理.
基本上,你试图违反WPF的一个硬编码规则,所以你可能不会找到一个简单的方法来做到这一点.也许您可能想要重新评估您的设计,并确定这种行为是否真的对您想要做的事情是必要的,或者您是否可以以不同的方式进行.
内容总结
以上是互联网集市为您收集整理的c# – 为什么ClipToBounds = false不起作用?全部内容,希望文章能够帮你解决c# – 为什么ClipToBounds = false不起作用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。