Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用;纯粹的;xaml布局,是否可以告诉容器不要调整其大小';谁的孩子?_C#_Wpf_Xaml_Layout - Fatal编程技术网

C# 使用;纯粹的;xaml布局,是否可以告诉容器不要调整其大小';谁的孩子?

C# 使用;纯粹的;xaml布局,是否可以告诉容器不要调整其大小';谁的孩子?,c#,wpf,xaml,layout,C#,Wpf,Xaml,Layout,我有一个非常宽的XAML控件。它会影响父对象的大小,因此更改布局我不希望它更改。我不介意控件是否会被剪裁,或者其他什么-但我想要以下内容: 我希望控件是其父控件的宽度,并且 我不希望它以其他方式影响其父对象的宽度 我知道我可以通过将宽度绑定到我感兴趣的父控件的实际宽度来实现这一点。然而,是否有一些面板或其他东西会从其父级获取其大小,而忽略其子级 因为这是在一个具有星形列的网格中,所以仅仅将它放在ScrollViewer中没有帮助-ScrollViewer仍然会增长以填充网格 在下面的示例中,我希

我有一个非常宽的XAML控件。它会影响父对象的大小,因此更改布局我不希望它更改。我不介意控件是否会被剪裁,或者其他什么-但我想要以下内容:

  • 我希望控件是其父控件的宽度,并且
  • 我不希望它以其他方式影响其父对象的宽度
  • 我知道我可以通过将宽度绑定到我感兴趣的父控件的实际宽度来实现这一点。然而,是否有一些面板或其他东西会从其父级获取其大小,而忽略其子级

    因为这是在一个具有星形列的网格中,所以仅仅将它放在ScrollViewer中没有帮助-ScrollViewer仍然会增长以填充网格

    在下面的示例中,我希望按钮控制中间列的宽度,并且textblock最多占用按钮的空间量:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Button Content="asdsadsad" Grid.Row="1" Grid.Column="1"/>
        <TextBlock IsHitTestVisible="True" Opacity="0" Grid.Row="1" Grid.Column="1" Text="sdfsdfdsfdfhfkjahslkjfhsafhsakjhflkjsahflkjsahdflkjhsadfsdfkgljdsfkgjfdsjgdshf" />
    </Grid>
    

    您可以将文本块放在画布中,然后将画布剪裁到其边界:

        <Canvas Grid.Row="1" Grid.Column="1" ClipToBounds="True">
            <TextBlock IsHitTestVisible="True" Opacity="0.5" Text="sdfsdfdsfdfhfkjahslkjfhsafhsakjhflkjsahflkjsahdflkjhsadfsdfkgljdsfkgjfdsjgdshf" />
        </Canvas>
    
    
    

    如果这就是你的意思。

    我看到你已经接受了另一个答案,但是如果你只是指文本块,你就不能使用文本修剪吗

    如果不是这样,一个简单的Panel子类会比canvas更好,因为在确定所需的大小时,可以显式忽略子类的大小。你还需要给孩子们量尺寸。在测量覆盖中确定面板大小时,您只需忽略它们的“DesiredSize”。然后在ArangeOverride中,它将遵循您在MeasureOverride中指定的最大大小

    这样做的好处是,文本框或任何控件仍然可以作为子对象正确地调整大小和布局,但它们永远不会影响面板的大小

    这是您需要的测量超越代码。然后,在安排重写中,你只需把孩子放在你想要的地方,决定考虑剪裁或约束到你认为合适的面板。(自定义面板是我最喜欢的WPF产品之一。)

    protected override Size MeasureOverride(Size availableSize)
    {
        // You still measure the children.  You just don't use them when determining the size of the panel.
        foreach(FrameworkElement childElement in this.Children)
        {
            if(childElement.Visibility != Visibility.Collapsed)
                childElement.Measure(availableSize);
        }
    
        return new Size(
            Double.IsPositiveInfinity(availableSize.Width)  ? 0 : availableSize.Width,
            Double.IsPositiveInfinity(availableSize.Height) ? 0 : availableSize.Height);
    }