@iRumba

Как создать таблицу стилей в xaml?

Здравствуйте. Я не могу найти инфу в гугле, потому что не знаю что искать.

Как сделать на xaml аналог html+css в плане обобщений?

Ну например в css я создаю класс, прописываю в нем свойства. Могу для каждого элемента в классе прописать отдельные свойства. Например беру див, помещаю в него текст, текстовое поле и кнопку. Создаю в файле стилей класс, добавляю в него стиль для текста, для текстового поля и для кнопки. В диве указываю класс, равный классу в таблице стилей и все, что внутри дива, получают свойства, указанные в таблице стилей.

А вот в хамле такая конструкция не получается. Вот стили.

<Window.Resources>
        <Style x:Key="OneLine">
            <Setter Property="TextBox.MaxLines" Value="1"/>
            <Setter Property="TextBox.HorizontalAlignment" Value="Stretch"/>
            <Setter Property="TextBox.Width" Value="auto"/>
            <Setter Property="TextBox.Margin" Value="0,0,0,10"/>

            <Setter Property="TextBlock.Width" Value="auto"/>
            <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch"/>
            <Setter Property="TextBlock.TextWrapping" Value="WrapWithOverflow"/>
            <Setter Property="TextBlock.Margin" Value="0,0,0,0"/>
            
            <Setter Property="Grid.Height" Value="auto"/>
            <Setter Property="Grid.Width" Value="auto"/>
            <Setter Property="Grid.HorizontalAlignment" Value="Stretch"/>
            <Setter Property="Grid.VerticalAlignment" Value="Top"/>
            
            <Setter Property="Label.Width" Value="auto"/>
            <Setter Property="Label.Margin" Value="10,10,10,10"/>
        </Style>           
    </Window.Resources>

Использовать эти стили я пытался разными способами в нужной мне стак панели.
Пробовал так:
<StackPanel HorizontalAlignment="Stretch" Height="auto" VerticalAlignment="Stretch" Width="auto" Style="{StaticResource OneLine}">

В этом случае применяется к самой стак панели, хотя она и не является лэйблом. То же самое свойство применяется к панели и из TextBlock. А вот к самим лэйблам внутри стак панели они не применяются.
Пробовал так:
<Style BasedOn="{StaticResource OneLine}">
                    
                </Style>

В этом случае ничего не происходит.
И пробовал так:
<Label Content="Прокси сервер:" Name="Label1" Style="{StaticResource OneLine}"/>

Так все работает хорошо, но я же не попугай, я не хочу для каждого элемента писать одно и то же. Я хочу написать у их родителя, а их заставить наследовать. И при этом чтобы родитель не перенимал свойства элемента, которым он не является (как в первом примере).
  • Вопрос задан
  • 551 просмотр
Решения вопроса 1
hePPer
@hePPer
создавайте стили отдельно для каждого элемента, при наличии каких либо общий свойств - делайте отдельный стиль и потом его переопределяйте.

<Style BasedOn="{StaticResource {x:Type CheckBox}}" TargetType="{x:Type CheckBox}">
        <Setter Property="CheckBox.HorizontalContentAlignment" Value="Left" />
        <Setter Property="CheckBox.VerticalContentAlignment" Value="Center" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Margin" Value="1" />
    </Style>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы