none
Изменение контента в стилях RRS feed

  • Вопрос

  • WPF C#

    Добрый день. Подскажите пожалуйста. Можно ли изменять контент в стилях.

    Например кнопка визуально я её отобразил так:

       <Style x:Key="ButtonAppBaseStyle" TargetType="{x:Type Button}">
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Background" Value="Black"/>
            <Setter Property="Height" Value="50"/>
            <Setter Property="Width" Value="50"/>
            <Setter Property="Foreground" Value="{DynamicResource ResourceKey=ColorButton}"/>
            <Setter Property="FontSize" Value="40"/>
            <Setter Property="Margin" Value="3"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <Rectangle Name="GelBackground" Fill="Transparent"/>
                            <Rectangle Name="GetRound" Stroke="{DynamicResource ColorButton}" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}" StrokeThickness="0"/>
                            <ContentPresenter Name="GelButtonContent" VerticalAlignment="Center" HorizontalAlignment="Center" Content="{TemplateBinding Content}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Rectangle.Fill" TargetName="GelBackground">
                                    <Setter.Value>
                                        <RadialGradientBrush>
                                            <GradientStop Offset="0" Color="{Binding Color, Source={StaticResource ColorBTNOver0}}" />
                                            <GradientStop Offset="1" Color="{Binding Color, Source={StaticResource ColorBTNOver1}}" />
                                        </RadialGradientBrush>
                                    </Setter.Value>
                                </Setter>
                                <Setter Property="Foreground" Value="{DynamicResource ResourceKey=ColorButton}" />
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Rectangle.Fill" TargetName="GelBackground">
                                    <Setter.Value>
                                        <RadialGradientBrush>
                                            <GradientStop Offset="0" Color="{Binding Color, Source={StaticResource ColorBTNPressed0}}" />
                                            <GradientStop Offset="1" Color="{Binding Color, Source={StaticResource ColorBTNPressed1}}" />
                                        </RadialGradientBrush>
                                    </Setter.Value>
                                </Setter>
                                <Setter Property="Foreground" Value="{DynamicResource ResourceKey=ColorButton}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    Сейчас чтобы отображать например текущую дату внутри кнопки я в каждом окне пишу BTN.Content = Datetime.Now;

    Можно ли этот вопрос внести сразу в разметку XAML, чтобы код не загромождать одним и тем же.

    Спасибо

    29 декабря 2015 г. 9:30

Ответы

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

    Да, можно:

    <Window x:Class="WpfApplication11.MainWindow"
            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:local="clr-namespace:WpfApplication11"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <Style TargetType="Button">
                <Setter Property="Content" Value="{Binding Source={x:Static sys:DateTime.Now}}" />
            </Style>
        </Window.Resources>
        <Grid>
            <Button />
        </Grid>
    </Window>
    

    Более подробно можно посмотреть здесь.

    • Помечено в качестве ответа DevingAs 29 декабря 2015 г. 15:02
    29 декабря 2015 г. 13:24
    Отвечающий

Все ответы

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

    Да, можно:

    <Window x:Class="WpfApplication11.MainWindow"
            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:local="clr-namespace:WpfApplication11"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <Style TargetType="Button">
                <Setter Property="Content" Value="{Binding Source={x:Static sys:DateTime.Now}}" />
            </Style>
        </Window.Resources>
        <Grid>
            <Button />
        </Grid>
    </Window>
    

    Более подробно можно посмотреть здесь.

    • Помечено в качестве ответа DevingAs 29 декабря 2015 г. 15:02
    29 декабря 2015 г. 13:24
    Отвечающий
  • Супер. Спасибо
    29 декабря 2015 г. 15:03
  • Да не за что. Обращайтесь.

    30 декабря 2015 г. 5:35
    Отвечающий