Элементы управления XAML компенсируют себя, становясь невидимыми в Blend и браузере - PullRequest
0 голосов
/ 11 января 2010

У меня проблема, видимая во время выполнения и в Expression Blend, когда текстовые блоки (не текстовые поля, кнопки или пользовательские элементы управления) в моей сетке макета продолжают выталкивать себя за пределы своих ячеек, делая их невидимыми. Если я коснусь любого из их свойств в Blend (например, увеличу, а затем уменьшу одно из полей), они станут видимыми в Blend, но все же не во время выполнения. Ниже приведен скриншот, демонстрирующий явление в Blend. Вы видите направляющие дизайна, указывающие, где должен находиться элемент управления, но его фактическое расположение над верхней частью холста.

Органы управления смещены в смеси http://tinyurl.com/y9ttscf

Обновление : Ниже я опубликовал XAML с удаленными VisualStateGroups (поскольку они значительно усложняют XAML, и проблема проявляется без них). Элемент управления, выбранный выше, является «loginTextBlock» ниже.

<navigation:Page 
    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:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
    mc:Ignorable="d" xmlns:UserControls="clr-namespace:MyClient.UserControls" xmlns:MyClient_Controls="clr-namespace:MyClient.Controls;assembly=MyClient.Controls" xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" x:Class="MyClient.Views.Login" 
    d:DesignWidth="640" d:DesignHeight="480"
    Title="Login"
    >

    <Grid x:Name="LayoutRoot">
        <Grid HorizontalAlignment="Center" Margin="0,16,0,0" VerticalAlignment="Top">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Name="loginTextBlock" HorizontalAlignment="Center" Style="{StaticResource HeaderTextStyle}" VerticalAlignment="Center" Text="Login" Grid.ColumnSpan="2" Margin="0,8"/>
            <TextBlock x:Name="usernameTextBlock" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Row="1" Text="User name:" TextWrapping="Wrap"/>
            <TextBox x:Name="usernameTextBox" HorizontalAlignment="Left" Margin="8,8,0,8" VerticalAlignment="Center" Width="175" Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" TabIndex="0" FontSize="16" Height="28" Padding="2"/>
            <TextBlock x:Name="passwordTextBlock" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Row="2" Text="Password:" TextWrapping="Wrap"/>
            <PasswordBox x:Name="passwordBox" HorizontalAlignment="Left" Margin="8,8,0,8" VerticalAlignment="Center" Width="175" Grid.Column="1" Grid.Row="2" TabIndex="1" FontSize="16" Height="28" Padding="2"/>
            <Button x:Name="okButton" Height="32" HorizontalAlignment="Center" Margin="0,16,0,0" VerticalAlignment="Top" Width="96" Content="OK" Grid.Row="3" TabIndex="2" Click="okButton_Click" Grid.ColumnSpan="2"/>
            <UserControls:StatusTextBlockControl x:Name="verifyingStatusTextBlockControl" Margin="8,16,8,8" VerticalAlignment="Center" Grid.Row="4" HorizontalAlignment="Center" Grid.ColumnSpan="2" Text="Verifying credentials..."/>
            <MyClient_Controls:LoginAttemptsCounter x:Name="loginAttemptsCounter" HorizontalAlignment="Center" Margin="8" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Row="5" FirstFailureMessage="Please re-enter your Windows credentials.&#x0a;After 2 more failed attempts, your account will be locked." Height="30"/>
        </Grid>

    </Grid>

</navigation:Page>

1 Ответ

0 голосов
/ 12 января 2010

По какой-то причине, когда мой элемент управления «LoginAttemptsCounter» находится в сетке (внизу), он испортил элементы управления TextBlock. Вместо этого я изменил свой макет, чтобы обернуть сетку в StackPanel и поместить LoginAttemptsCounter в StackPanel ниже сетки, а не в нижнем ряду сетки. Это сработало.

Ключевым моментом является то, что мой пользовательский элемент управления не может находиться внутри того же контейнера (или StackPanel или Grid), что и TextBlocks.

...