Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Изменение кнопки


Автор: WingfirE 13.10.2014, 22:43
Всем привет. Можете помочь, как можно сделать, чтобы при наведении на кнопку, она наполовину меняла цвет? И еще при нажатии на кнопку менялся цвет с задержкой на несколько секунд? Также как можно сделать произвольную форму кнопки?
Как правильно использовать свойство KeyTime, что установить время задержки цвета при нажатии на кнопку?
Код

<Window x:Class="WpfApplication10.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ControlTemplate x:Key="TemplateB" TargetType="Button">
            <Border BorderBrush="Orange" BorderThickness="3" CornerRadius="2" Name="bor"
                  TextBlock.Foreground="Red">
                <Border.Background>
                    <LinearGradientBrush>
                        <GradientStopCollection>
                            <GradientStop Offset="0" Color="Yellow"></GradientStop>
                            <GradientStop Offset="1" Color="Green"></GradientStop>
                        </GradientStopCollection>
                    </LinearGradientBrush>
                </Border.Background>
                <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="bor" Property="Background" Value="Green"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="bor" Property="Background" Value="Red"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Window.Resources>
    <Button Margin="10" Width="130" Height="130" Template="{StaticResource TemplateB}"></Button>
</Window>

Автор: Ilya81 14.10.2014, 11:04
Для формы кнопки и всего прочего замените Border на то, что нужно. Какая задержка - я не понял, лучше используйте анимацию - Trigger.EnterActions и Trigger.ExitActions. В Storyboard можете выставить просто общее время изменения цвета или, если нужно, чтоб он менялся нелинейно, то тогда KeyFrame.

Автор: WingfirE 14.10.2014, 15:30
Помогите найти ошибку, необходимо по нажатию кнопки, чтобы она меня цвет наполовину, и цвет держался несколько секунд, у меня она просто меняет цвет
Код

<Window x:Class="WpfApplication12.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
            <ControlTemplate x:Key="TemplateB" TargetType="Button">
            <Border BorderBrush="Orange" BorderThickness="3" CornerRadius="2" Name="bor"
                  TextBlock.Foreground="Red">
                <Border.Background>
                    <LinearGradientBrush>
                        <GradientStopCollection>
                            <GradientStop Offset="0" Color="Yellow"></GradientStop>
                            <GradientStop Offset="1" Color="Green"></GradientStop>
                        </GradientStopCollection>
                    </LinearGradientBrush>
                </Border.Background>
                <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="bor" Property="Background" Value="Green"></Setter>
                </Trigger>
                <!--Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="bor" Property="Background" Value="Red"></Setter>
                </Trigger-->
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <ControlTemplate x:Key="TemplateA" TargetType="Button">
            <Border Name="bor"
                  TextBlock.Foreground="Red">
                <Border.Background>
                    <LinearGradientBrush>
                        <GradientStopCollection>
                            <GradientStop Offset="0" Color="Yellow"></GradientStop>
                            <GradientStop Offset="1" Color="Green"></GradientStop>
                        </GradientStopCollection>
                    </LinearGradientBrush>
                </Border.Background>
                <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter>
                <Border.Triggers>
                    <EventTrigger RoutedEvent="Border.MouseDown">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)">
                                        <LinearColorKeyFrame KeyTime="00:00:00" Value="Red"></LinearColorKeyFrame>
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </Border.Triggers>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="bor" Property="Background" Value="Green"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                <Setter TargetName="bor"  Property="Background" Value="Red"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
            </ControlTemplate>
    </Window.Resources>
    <Button Margin="10" Width="130" Height="130" Template="{StaticResource TemplateB}">
    <Button Margin="65,0,0,0" Width="65" Height="130" Template="{StaticResource TemplateA}"></Button>
    </Button>
</Window>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)