gpt4 book ai didi

c# - 为什么 ClipToBounds = false 不起作用?

转载 作者:太空狗 更新时间:2023-10-30 00:50:36 24 4
gpt4 key购买 nike

我不想剪切文本 block 的文本。为此,我将 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;
}

截图:

下面的截图就是我想要的。 :

最佳答案

ClipToBounds 默认为 false。但是,由于某些元素执行布局的方式,裁剪仍然可能发生。基本上 WPF 中的工作方式是设置 ClipToBounds = true 将强制剪辑。将其设置为 false 意味着 WPF 根据测量约束和排列矩形确定事物应如何裁剪。

如果您查看 FrameworkElement 中的 ArrangeCoreMeasureCore 方法,你会看到有相当多的逻辑来决定是否应该裁剪某些东西。当然,重写 FrameworkElement 的东西可以根据需要自由呈现,但通常它们会遵守基类建立的裁剪规则。

TextBlock 的情况下,如果其大小受到限制,它肯定会剪切超出其范围的文本。您可以通过简单地在其上设置 Width 或将其放置在其上设置了 Width 的父级来看到这一点。

如果您确实需要在控件边界之外呈现文本,您可能必须考虑编写自定义文本呈现元素之类的方法。 即便如此,只要您将它放置在其他可以剪裁的东西中,它仍然会被其父级剪裁。所以,您仍然可能会卡住。

您可以尝试将 TextBlock 放在按钮的顶部而不是按钮内部,并设置它的位置以使其位于正确的位置(可能通过将它绑定(bind)到某个东西)。这会奏效,但如果您需要执行太多操作,可能会难以管理。

基本上,您正试图违反 WPF 的硬编码规则之一,因此您可能找不到一种简单的方法来做到这一点。也许您可能想要重新评估您的设计并确定此行为是否真的是您想要做的事情所必需的,或者您是否可以采用不同的方式来实现它。

关于c# - 为什么 ClipToBounds = false 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com