首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ClipToBounds = false不起作用?

为什么ClipToBounds = false不起作用?
EN

Stack Overflow用户
提问于 2015-06-21 21:10:05
回答 2查看 3.3K关注 0票数 4

我不想剪切文本块的文本。出于这个原因,我将viewBox.ClipToBounds设置为false,但它不起作用。

请告诉我为什么ClipToBounds=false不能在下面的代码中工作:

代码语言:javascript
复制
   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:

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

EN

回答 2

Stack Overflow用户

发布于 2015-06-21 23:18:42

默认情况下,ClipToBoundsfalse。但是,由于某些元素执行布局的方式,裁剪仍然可能发生。基本上,在WPF中的工作方式是,设置ClipToBounds = true将强制裁剪。将其设置为false意味着WPF将根据度量约束和排列矩形来确定裁剪对象的方式。

如果您查看FrameworkElement中的ArrangeCoreMeasureCore方法,您会发现其中有相当多的逻辑来决定是否应该裁剪某些内容。当然,覆盖FrameworkElement的东西可以随意渲染,但通常它们会遵守基类建立的裁剪规则。

TextBlock的情况下,如果它的大小受到限制,它肯定会剪切超出其边界的文本。您只需在其上设置一个Width,或者将其放置在一个设置了Width的父项上,就可以看到这一点。

如果您确实需要在控件边界之外呈现文本,则可能必须考虑编写自定义文本呈现元素之类的操作。即使这样,一旦你把它放在其他被剪辑的东西中,它仍然会被它的父级剪裁。所以,你仍然有可能被卡住。

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

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

票数 4
EN

Stack Overflow用户

发布于 2015-06-22 02:41:19

多亏了埃尔贡佐和泽维尔。

我意识到我不应该把画布放在viewbox中。

通过2次改变我的问题解决了。

1-将viewbox与canvas互换。

2-删除canvas.with = ...

这是正确的代码:

代码语言:javascript
复制
 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(canvas);
        viewBox.Child = textBlock;
        canvas.Children.Add(viewBox);
        button.Content = stackPanel;

        Canvas MainCanvas = new Canvas();
        MainCanvas.Children.Add(button);
        this.Content = MainCanvas;

    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30964863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档