none
По разметке WPF RRS feed

  • Вопрос

  • Вот два примера Стиль + сам элемент

    1) 

        <Style x:Key="TBBlockOtmetki" TargetType="TextBlock">
            <Setter Property="FontSize" Value="50" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <!--<Setter Property="Padding" Value="0" />-->
            <Setter Property="Width" Value="Auto" />
            <Setter Property="Height" Value="Auto" />
        </Style>
    <TextBlock Style="{StaticResource TBBlockOtmetki}" x:Name="TBAb4" Margin="416,1212,684,170"/>
        <Style x:Key="TBBoxOtmetki" TargetType="TextBox">
            <Setter Property="FontSize" Value="50" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <!--<Setter Property="Padding" Value="0" />-->
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="Width" Value="Auto" />
            <Setter Property="Height" Value="Auto" />
            <Setter Property="BorderThickness" Value="0" />
        </Style>
    <TextBox Style="{StaticResource TBBoxOtmetki}" x:Name="TBOt4" TextChanged="TBOt4_TextChanged_1"  Margin="401,1108,637,271" />

    2)

        <Style x:Key="LblData" TargetType="Label">
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Bottom" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="Padding" Value="0" />
            <Setter Property="FontSize" Value="16"/>
            <Setter Property="Width" Value="Auto"/>
            <Setter Property="Height" Value="18"/>
        </Style>
        <Style x:Key="LBBldWindow" BasedOn="{StaticResource LblData}" TargetType="Label">
            <Setter Property="FontSize" Value="50"/>
            <Setter Property="Height" Value="Auto"/>
        </Style>
    <Label Style="{StaticResource LBBldWindow}" Margin="0,0,605,600" x:Name="LblAbsolOtmetka6" HorizontalAlignment="Left"/>

    Итак в первом случае TextBlock и TextBox во втором случае Label. И там и там Width="Auto" 

    Но почему то в Label (т.е. 2 вариант) все работает. И Ширина подбирается под текст внутри, в первом варианте ничего не видно т.к. Width="Auto" Приходится ширину задавать. Почему не понятно.



    27 июня 2012 г. 20:11

Ответы

  • Добрый день.

    У меня есть нехорошее ощущение, что проблема в Margin. Почитайте про компоновку элементов при помощи Grid, WrapPanel, StackPanel и у вас пропадут все Margin-ы кроме простых, вида Margin="5".  Но, возвращаясь к вашей проблеме. Вот разметка страницы:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <TextBlock Width="auto" Grid.Column="0" Text="Привет" />
        <Label Width="auto" Grid.Column="1" Content="Привет" />
        <TextBox Width="auto" Grid.Column="2" Text="Привет" />
    </Grid>

    Вот так, это выглядит:

    Как видите, все эти элементы адекватно отрабатывают Width="auto".

    • Помечено в качестве ответа developers_s 28 июня 2012 г. 6:32
    28 июня 2012 г. 3:05
    Отвечающий
  • Проблема не в стилях а в том, что вы зажимаете TextBlock и TextBox свойством Margin, которое не позволяет принять элементу нужный размер. Задайте Margin из TextBlock для Label и получите тот же результат.

    UPD. В поддержку ответа Алексея хочу сказать, что практика перетаскивания элементов с "Панели элементов" и размещения их где то на форме не очень хорошая. Старайтесь строить дерево из контейнеров и их содержимого (то есть учитесь работать толь с XAML). Почитайте про контейнеры (ссылки, что вам дал Алексей) и учитесь компонюя их строить удобный и, независимый от размеров окна, интерфейс


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Изменено LXGDARKEditor 28 июня 2012 г. 3:18
    • Помечено в качестве ответа developers_s 28 июня 2012 г. 6:32
    28 июня 2012 г. 3:13
    Отвечающий

Все ответы

  • Добрый день.

    У меня есть нехорошее ощущение, что проблема в Margin. Почитайте про компоновку элементов при помощи Grid, WrapPanel, StackPanel и у вас пропадут все Margin-ы кроме простых, вида Margin="5".  Но, возвращаясь к вашей проблеме. Вот разметка страницы:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <TextBlock Width="auto" Grid.Column="0" Text="Привет" />
        <Label Width="auto" Grid.Column="1" Content="Привет" />
        <TextBox Width="auto" Grid.Column="2" Text="Привет" />
    </Grid>

    Вот так, это выглядит:

    Как видите, все эти элементы адекватно отрабатывают Width="auto".

    • Помечено в качестве ответа developers_s 28 июня 2012 г. 6:32
    28 июня 2012 г. 3:05
    Отвечающий
  • Проблема не в стилях а в том, что вы зажимаете TextBlock и TextBox свойством Margin, которое не позволяет принять элементу нужный размер. Задайте Margin из TextBlock для Label и получите тот же результат.

    UPD. В поддержку ответа Алексея хочу сказать, что практика перетаскивания элементов с "Панели элементов" и размещения их где то на форме не очень хорошая. Старайтесь строить дерево из контейнеров и их содержимого (то есть учитесь работать толь с XAML). Почитайте про контейнеры (ссылки, что вам дал Алексей) и учитесь компонюя их строить удобный и, независимый от размеров окна, интерфейс


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Изменено LXGDARKEditor 28 июня 2012 г. 3:18
    • Помечено в качестве ответа developers_s 28 июня 2012 г. 6:32
    28 июня 2012 г. 3:13
    Отвечающий