我创建了一个模态对话窗口,其中包含三个基本部分:包含指令的TextBlock,用于对话框的ContentControl和用于对话框按钮的ContentControl。每个部分都包含在单独的网格行中。WPF:拉伸尺寸调整的顺序
当谈到如何调整对话框大小时,我有一些特定的约束。我遇到的问题是使用说明TextBlock。我希望说明与对话框的ContentControl一样宽。这些说明应该根据需要进行垂直包装和垂直成长。如果指令不能垂直增长,那么它应该开始水平增长。
使指令成为ContentControl的宽度并垂直增长非常简单。我似乎无法弄清楚的一部分是如何在垂直空间之外水平增长。我最初的想法是创建一个扩展TextBlock并覆盖MeasureOverride的类。但是,该方法是密封的。目前,我打算让对话窗口覆盖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会水平增长。 – RFBoilers 2010-04-28 13:21:33