Окно открыто с помощью showDialog, TextBlock отображается под окном вместо текста

У меня есть эта странная проблема с wpf. У меня есть окно (полный экран) с изображением, которое выглядит так: введите здесь описание изображения

Я открываю новое окно с Showdialog над этим окном, которое не является полноэкранным (выглядит как всплывающее окно, но это окно). код такой:

 Window next;  next = new PasswordVerification();
 next.Owner = this;
  next.ShowDialog();

в открытом окне я использую это, чтобы центрировать «всплывающее окно»:

 this.Left = this.Owner.Left + (this.Owner.Width - this.ActualWidth) / 2;
        this.Top = this.Owner.Top + (this.Owner.Height - this.ActualHeight) / 2;
        this.Topmost = true;

Я получаю что-то вроде этого (я обрезал его, окно немного больше): введите здесь описание изображения

Где текстовый блок определяется следующим образом:

            <Rectangle Name="errorBorder" Fill="#34FF0000" FlowDirection="RightToLeft" RadiusX="13" RadiusY="13" Stroke="#FFB80005" Visibility="Visible" Margin="43,195,78,203" />
        <TextBlock Name="error" Text="TextBlock" Margin="49,195,91,205" FontSize="20" FlowDirection="RightToLeft" FontWeight="Bold" Foreground="#FFB80000" Visibility="Visible" />

Теперь у меня есть кнопка, которая делает это:

 error.Text = "blabla";

Но вместо того, что я ожидал (что текст изменится), я получаю это странное: введите описание изображения здесь Вы можете видеть, что изображение из заднего окна немного показано вместо моего текстового блока!

Что здесь происходит? Пожалуйста, помогите!

XAML всплывающего окна:

<Window ...  Width="1000" Height="700"  AllowsTransparency="True" 
WindowStyle="None" 
Background="#00000000"/>
<Border  Style="{StaticResource SmallScreenBorderStyle}" CornerRadius="23" Padding="2" Margin="153.66,117.992,153.661,117.992" d:LayoutOverrides="Width, Height">
 <!-- Use a VisualBrush of 'mask' as the opacity mask -->
        <Grid.OpacityMask>
            <VisualBrush Visual="{Binding ElementName=mask}"/>
        </Grid.OpacityMask>
  <!-- Rounded mask (stretches to fill Grid) to make grid rounded corners -->
        <Border x:Name="mask" CornerRadius="20" Margin="2,5,-1,-5" d:LayoutOverrides="GridBox" Style="{StaticResource MaskBorderStyle}"/>

person Programer    schedule 28.03.2012    source источник
comment
Только что сделал простое приложение, пытающееся воспроизвести ваше поведение, но оно сработало, как и ожидалось. Судя по картинкам, я предполагаю, что окно PasswordVerification имеет некоторые модификации, которые делают его похожим на всплывающее окно. Можете ли вы показать их? Или отключить их, чтобы сузить проблему?   -  person SvenG    schedule 29.03.2012
comment
да. Я редактирую свой пост, я добавлю немного xaml   -  person Programer    schedule 29.03.2012


Ответы (2)


Несколько предложений:
1) Удалите свой код, чтобы открыть окно в центре владельца, просто используйте это в своем Window XAML:

<Window ....
    WindowStartupLocation="CenterOwner">

2) Сократите метод вызова:

Window next = new PasswordVerification {Owner = this};
next.ShowDialog();

3) Поместите Rectangle и TextBlock в <StackPanel> или другой контейнер. Вероятно, проблема в том, что эти элементы управления перекрываются, потому что живет внутри Grid.

person asktomsk    schedule 29.03.2012
comment
1 отсутствует код. 2 не является обязательным, так как мой код немного длиннее, здесь я упростил его для удобства. я попробую 3 - person Programer; 29.03.2012
comment
Ах, видите. Похоже, какая-то проблема в визуальном дереве. Вы пытались удалить AllowsTransparency=True из Window XAML или this.Topmost = true из кода программной части (я думаю, что в этом нет необходимости, потому что модальный диалог уже вверху). - person asktomsk; 29.03.2012

Не могли бы вы попробовать установить для свойства Visible значение false в своей основной форме, а затем установить его обратно в значение true после ShowDialog?

person thecoolmacdude    schedule 25.05.2012