Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# WPF:拉伸上浆顺序_C#_Wpf_Layout - Fatal编程技术网

C# WPF:拉伸上浆顺序

C# WPF:拉伸上浆顺序,c#,wpf,layout,C#,Wpf,Layout,我正在创建一个模式对话框窗口,它包含三个基本部分:包含指令的文本块、对话框面板的ContentControl和对话框按钮的ContentControl。每个零件都包含在单独的网格行中 对于对话框的大小,我有一些具体的限制。我遇到的问题是指令文本块。我希望指令与对话框面板的ContentControl一样宽。然后,说明书应根据需要进行包装和垂直增长。如果指令不能垂直增长,那么它应该开始水平增长 将指令设置为ContentControl的宽度并垂直增长很简单。我似乎不明白的是,当它离开垂直空间时,如

我正在创建一个模式对话框窗口,它包含三个基本部分:包含指令的文本块、对话框面板的ContentControl和对话框按钮的ContentControl。每个零件都包含在单独的网格行中

对于对话框的大小,我有一些具体的限制。我遇到的问题是指令文本块。我希望指令与对话框面板的ContentControl一样宽。然后,说明书应根据需要进行包装和垂直增长。如果指令不能垂直增长,那么它应该开始水平增长

将指令设置为ContentControl的宽度并垂直增长很简单。我似乎不明白的是,当它离开垂直空间时,如何使其水平生长。我最初的想法是创建一个扩展TextBlock并覆盖MeasureOverride的类。然而,这种方法是封闭的。目前,我正在考虑让对话框窗口覆盖MeasureOverride来计算指令块的可用大小

我是否错过了一个更简单的实现方法?有人有比这更好的主意吗?干扰测量似乎要做很多工作

下面是一些示例代码,让您大致了解对话框的布局:

<Window
    x:Class="Dialogs.DialogWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="dialogWindow"
    ShowInTaskbar="False"
    WindowStyle="None"
    AllowsTransparency="True"
    Background="Transparent"
    ResizeMode="NoResize"
    SizeToContent="WidthAndHeight"
    WindowStartupLocation="CenterScreen">

    <Border Style="{StaticResource WindowBorderStyle}" Margin="15">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <TextBlock
                Margin="25,5"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Text="{Binding Instructions}"
                TextWrapping="Wrap"
                Width="{Binding ElementName=panelContentControl, Path=ActualWidth, Mode=OneWay}"/>

            <ContentControl
                x:Name="panelContentControl"
                Grid.Row="1"
                Margin="25,5"
                Content="{Binding PanelContent}"/>

            <ContentControl
                x:Name="buttonsContentControl"
                Grid.Row="2"
                HorizontalAlignment="Right"
                VerticalAlignment="Center"
                Margin="25,5"
                Content="{Binding ButtonsContent}"/>
        </Grid>
    </Border>

</Window>

看起来好像您真正想要创建一个新的
面板
,或者从现有面板派生出来,取代当前的
网格
<“代码>面板”负责布局您的内容,所以您应该这样做,而不是乱动
窗口。测量覆盖率


您希望您的
TextBlock
水平增长的具体方式是什么?为什么要这样?通过水平增长,您希望它也增长窗口吗?

是的,窗口也需要水平增长。它应该首先垂直增长的原因是,指令与对话框的面板内容一样宽,除非必要,否则面板内容不需要增长。如果对话框窗口不再垂直增长,文本块将水平增长。