2015-12-31 84 views
3

我已經創建了自動縮放取決於文本的長度的簡單的自定義消息框:設置按鈕保證金

public partial class CustomMessageBox : Window 
{ 
    public CustomMessageBox(string title, string text) 
    { 
     InitializeComponent(); 
     ResizeMode = ResizeMode.NoResize; 
     label.Content = text; 
     Title = title; 
    } 

    public static void Show(string title, string text) 
    { 
     CustomMessageBox box = new CustomMessageBox(title, text); 
     box.SizeToContent = SizeToContent.WidthAndHeight; 
     box.ShowDialog(); 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     Close(); 
    } 
} 

這工作得很好但是我的按鈕被夾在底部窗口的一側,因爲窗口自動縮放:

clamping

而且按鈕似乎正一旦消息變得更長:

moving button

我該如何確保按鈕保持居中,並且距離底部有10px左右的邊距,因此看起來並不會被夾住?

我試圖手動設置Margin,但似乎沒有工作。

XAML(主要是由設計器生成):

<Window x:Class="RapidEvent.CustomMessageBox" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:RapidEvent" 
     mc:Ignorable="d" 
     Background="{DynamicResource WindowBackgroundBrush}" 
     Title="" Height="Auto" Width="Auto"> 
    <Grid> 
     <StackPanel> 
      <Label x:Name="label" Content="" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" FontSize="13px" RenderTransformOrigin="0.392,0.486"/> 
      <Button x:Name="button" x:FieldModifier="public" IsDefault="True" Content="_Ok" HorizontalAlignment="Left" Margin="110,40,0,0" VerticalAlignment="Top" Width="80" Height="21" Click="button_Click"/> 
     </StackPanel> 
    </Grid> 
</Window> 
+1

你有沒有試着用_Horizo​​ntalAlignment = 「中心」 保證金= 「0,40,0,10」 _ – Steve

+0

@Steve這似乎工作。而且它也很容易......謝謝:P –

回答

2

簡單地改變你的StackPanelGrid和你的按鈕的HorizonalAlignmentCenter,並採取了所有,但底部邊緣。您還需要將VerticalAlignment設置爲Bottom。您還需要將按鈕放在第1行上。

這樣,按鈕將被固定到對話框的底部並始終居中。

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Label x:Name="label" Content="" 
       HorizontalAlignment="Left" Margin="10,0,0,0" 
       VerticalAlignment="Top" FontSize="13px" 
       RenderTransformOrigin="0.392,0.486"/> 
     <Button Grid.Row="1" x:Name="button" x:FieldModifier="public" 
       IsDefault="True" Content="_Ok" 
       HorizontalAlignment="Center" Margin="0,0,0,20" 
       VerticalAlignment="Bottom" Width="80" Height="21"/> 
    </Grid> 
2

使用電網的,而不是StackPanel中:

<Grid > 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
       <telerik:Label x:Name="label" Content="LSFFD" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" FontSize="13px" RenderTransformOrigin="0.392,0.486"/> 
       <Button Grid.Row="1" x:Name="button" x:FieldModifier="public" Content="_Ok" HorizontalAlignment="Center" Margin="0 0 0 10" VerticalAlignment="Bottom" Width="80" Height="21" Click="button_Click"/> 

     </Grid>