2013-06-02 4 views
0

У меня WPF окно, что я сделал в полноэкранном режиме, назначив следующие свойства:Горизонтально Центр TextBlock в Fullscreen

WindowState = Maximized 
WindowStyle = None 
Topmost = true 

Это работает очень хорошо до сих пор. Теперь у меня есть два TextBlocks на моем Window, которые я хотел бы центрировать по горизонтали. Поскольку это полноэкранный режим, моя идея состояла в том, чтобы просто вычислить позицию с разрешения экрана. Так что я попытался следующие:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    IntPtr handle = WinApi.getWindowByName("myWindow"); 
    int height = Screen.FromHandle(handle).Bounds.Height; 
    int width = Screen.FromHandle(handle).Bounds.Width; 
    textBlock1.Margin = new Thickness(width/2 - textBlock1.ActualWidth, height/10, width/2 - textBlock1.ActualWidth, height/1.5); 
    textBlock2.Margin = new Thickness(width/2 - textBlock2.ActualWidth, height/10, width/2 - textBlock2.ActualWidth, height/3); 
} 

WinApi класс от меня, который инкапсулирует WinApi. Я использую ActualWidth, так как ширина как TextBlocks установлена ​​на Auto. Пока что размеры экрана пока прекрасны. Однако текстовые блоки не отображаются точно в середине экрана. Я знаю это точно, потому что они оба отображаются в разных горизонтальных положениях.

Мой XAML:

<Window x:Class="MyApp.MyWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="test" Height="300" Width="300" WindowState="Maximized" WindowStyle="None" Topmost="True" Background="#FF0000DC" Foreground="#FFF4FCF8" Loaded="Window_Loaded"> 

    <Grid> 
     <TextBlock x:Name="textBlockHeader" HorizontalAlignment="Center" Background="White" Foreground="#FF0C04DB" FontWeight="Bold" FontFamily="Lucida Console" Width="Auto" Height="Auto" Text="Header" TextAlignment="Center"/> 
     <TextBlock x:Name="textBlockText" HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" TextAlignment="Center" FontFamily="Lucida Console" Text="text"/> 
    </Grid> 
</Window> 
+0

Я сделал скриншот того, как он выглядит: http://www11.picfront.org/token/UAhu/2013/06/ 02/2140894.png На картинке вы можете четко видеть, что два текстовых блока не одинаково выровнены. – Simon

+0

получает 404 на этот URL. –

+0

Попробуйте это http://www.picfront.org/d/8YWz – Simon

ответ

0

Вы плавание вверх по течению. Почему бы просто не использовать WPF layout system?

<Window ...> 
    <StackPanel> 
     <TextBlock HorizontalAlignment="Center">Foo</TextBlock> 
     <TextBlock HorizontalAlignment="Center">Bar</TextBlock> 
    </StackPanel> 
</Window> 

Update после просмотра вашего экрана:

Вы должны иметь что-то не так с вашей XAML, но я не могу сказать, что, потому что вы не отправил его. Это отлично работает для меня:

<Window x:Class="SO16881549.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     WindowState="Maximized" 
     WindowStyle="None" 
     Topmost="True"> 
    <DockPanel> 
     <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center">Title</TextBlock> 
     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">This is a test-text!</TextBlock> 
    </DockPanel> 
</Window> 
+0

Я пробовал это, но он по-прежнему не показывает мой TextBlocks по центру. Они все еще находятся на разных позициях. – Simon

0

Попробуйте это:

<TextBlock Text="Your text" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
Смежные вопросы