我創建了一個模態對話窗口,其中包含三個基本部分:包含指令的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