• wpf中bool按钮三种方式


    今天用到了bool按钮,学习了下

    1,这可通过自己绘制。然后适用于一个bool按钮

    xmal 代码

    <Grid x:Name="LayoutRoot"
    Background="Transparent"
    Width="60" Height="24" MouseLeftButtonUp="LayoutRoot_MouseLeftButtonUp">
    <Border BorderBrush="#cccccc"
    BorderThickness="1" Margin="4,2"
    Padding="0" CornerRadius="8" Background="#e74c3c">
    <Rectangle Name="fillRectangle"
    Fill="#2ecc71" RadiusX="8" RadiusY="8"
    Visibility="Collapsed"/>
    </Border>
    <Border Name="slideBorder"
    BorderBrush="#aaaaaa"
    BorderThickness="1"
    HorizontalAlignment="Left" CornerRadius="15" Width="24" Height="24">
    <Rectangle Stroke="Brown"
    Fill="#FFF1F1F1"
    StrokeThickness="0"
    Width="22" RadiusX="15" RadiusY="15"/>
    </Border>
    </Grid>

    <Grid x:Name="LayoutRoot1"
    Background="Transparent"
    Width="60" Height="24" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="116,161,0,0" MouseLeftButtonUp="LayoutRoot_MouseLeftButtonUp">
    <Border BorderBrush="#cccccc"
    BorderThickness="1" Margin="4,2"
    Padding="0" CornerRadius="8" Background="#e74c3c">
    <Rectangle Name="fillRectangle1"
    Fill="#2ecc71" RadiusX="8" RadiusY="8"
    Visibility="Collapsed"/>
    </Border>
    <Border Name="slideBorder1"
    BorderBrush="#aaaaaa"
    BorderThickness="1"
    HorizontalAlignment="Left" CornerRadius="15" Width="24" Height="24">
    <Rectangle Stroke="Brown"
    Fill="#FFF1F1F1"
    StrokeThickness="0"
    Width="22" RadiusX="15" RadiusY="15"/>
    </Border>
    </Grid>

    cs里面的代码

    public static readonly DependencyProperty IsCheckedProperty =
    DependencyProperty.Register("IsChecked", typeof(bool), typeof(text), new PropertyMetadata(default(bool), OnIsCheckedChanged));

    public event RoutedEventHandler Checked;

    public event RoutedEventHandler UnChecked;

    public bool IsChecked
    {
    get { return (bool)GetValue(IsCheckedProperty); }
    set { SetValue(IsCheckedProperty, value); }
    }

    private static void OnIsCheckedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
    (obj as text).OnIsCheckedChanged(args);
    }
    private void OnIsCheckedChanged(DependencyPropertyChangedEventArgs args)
    {
    fillRectangle.Visibility = IsChecked ? Visibility.Visible : Visibility.Collapsed;
    slideBorder.HorizontalAlignment = IsChecked ? HorizontalAlignment.Right : HorizontalAlignment.Left;

    if (IsChecked && Checked != null)
    {
    Checked(this, new RoutedEventArgs());
    }
    if (!IsChecked && UnChecked != null)
    {
    UnChecked(this, new RoutedEventArgs());
    }
    }

    private void LayoutRoot_MouseLeftButtonUp(object sender, MouseButtonEventArgs args)
    {
    args.Handled = true;
    IsChecked ^= true;
    }

    2,这个使用与多个bool按钮

    xaml里面的代码

            <CheckBox x:Name="checkBox1"  HorizontalAlignment="Left" Margin="120,194,0,0" VerticalAlignment="Top" Style="{StaticResource CheckBoxStyle1}" Height="30"/>

    样式

    <Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type CheckBox}">
    <ControlTemplate.Resources>
    <Storyboard x:Key="OnChecking">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="slider" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
    <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="25"/>
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="OnUnchecking">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="slider" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
    <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <ThicknessAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="slider" Storyboard.TargetProperty="(FrameworkElement.Margin)">
    <SplineThicknessKeyFrame KeyTime="00:00:00.3000000" Value="1,1,1,1"/>
    </ThicknessAnimationUsingKeyFrames>
    </Storyboard>
    </ControlTemplate.Resources>

    <DockPanel x:Name="dockPanel">
    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}" RecognizesAccessKey="True" VerticalAlignment="Center"/>
    <Grid Margin="5,5,0,5" Width="50" Background="#FFC0CCD9">
    <TextBlock Text="ON" TextWrapping="Wrap" FontWeight="Bold" FontSize="12" HorizontalAlignment="Right" Margin="0,0,3,0"/>
    <TextBlock HorizontalAlignment="Left" Margin="2,0,0,0" FontSize="12" FontWeight="Bold" Text="OFF" TextWrapping="Wrap"/>
    <Border HorizontalAlignment="Left" x:Name="slider" Width="23" BorderThickness="1,1,1,1" CornerRadius="3,3,3,3" RenderTransformOrigin="0.5,0.5" Margin="1,1,1,1">
    <Border.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="1" ScaleY="1"/>
    <SkewTransform AngleX="0" AngleY="0"/>
    <RotateTransform Angle="0"/>
    <TranslateTransform X="0" Y="0"/>
    </TransformGroup>
    </Border.RenderTransform>
    <Border.BorderBrush>
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFFFFFFF" Offset="0"/>
    <GradientStop Color="#FF4490FF" Offset="1"/>
    </LinearGradientBrush>
    </Border.BorderBrush>
    <Border.Background>
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FF8AB4FF" Offset="1"/>
    <GradientStop Color="#FFD1E2FF" Offset="0"/>
    </LinearGradientBrush>
    </Border.Background>
    </Border>
    </Grid>
    </DockPanel>

    <ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
    <Trigger.ExitActions>
    <BeginStoryboard Storyboard="{StaticResource OnUnchecking}" x:Name="OnUnchecking_BeginStoryboard"/>
    </Trigger.ExitActions>
    <Trigger.EnterActions>
    <BeginStoryboard Storyboard="{StaticResource OnChecking}" x:Name="OnChecking_BeginStoryboard"/>
    </Trigger.EnterActions>
    </Trigger>
    <Trigger Property="IsEnabled" Value="False">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>

    3.像第二种

    xmal代码

            <CheckBox x:Name="checkBox1" Content="" HorizontalAlignment="Left" Margin="101,226,0,0" VerticalAlignment="Top" Style="{StaticResource OrangeSwitchStyle}" Height="30"/>

    样式

    <LinearGradientBrush x:Key="CheckedBlue" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#FF285AB3" Offset="0" />
    <GradientStop Color="#FF4184EC" Offset="0.5" />
    <GradientStop Color="#FF558BED" Offset="0.5" />
    <GradientStop Color="#FF7DACF0" Offset="1" />
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="CheckedOrange" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#FFCA6A13" Offset="0" />
    <GradientStop Color="#FFF67D0C" Offset="0.2" />
    <GradientStop Color="#FFFE7F0C" Offset="0.2" />
    <GradientStop Color="#FFFA8E12" Offset="0.5" />
    <GradientStop Color="#FFFF981D" Offset="0.5" />
    <GradientStop Color="#FFFCBC5A" Offset="1" />
    </LinearGradientBrush>
    <SolidColorBrush x:Key="CheckedOrangeBorder" Color="#FF8E4A1B" />
    <SolidColorBrush x:Key="CheckedBlueBorder" Color="#FF143874" />
    <Style x:Key="OrangeSwitchStyle" TargetType="{x:Type CheckBox}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" />
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type CheckBox}">
    <ControlTemplate.Resources>
    <Storyboard x:Key="OnChecking">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="slider" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
    <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="53" />
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="OnUnchecking">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="slider" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
    <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0" />
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    </ControlTemplate.Resources>
    <DockPanel x:Name="dockPanel">
    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}" RecognizesAccessKey="True" VerticalAlignment="Center" />
    <Grid>
    <Border x:Name="BackgroundBorder" BorderBrush="#FF939393" BorderThickness="1" CornerRadius="3" Height="27" Width="94">
    <Border.Background>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#FFB5B5B5" Offset="0" />
    <GradientStop Color="#FFDEDEDE" Offset="0.1" />
    <GradientStop Color="#FFEEEEEE" Offset="0.5" />
    <GradientStop Color="#FFFAFAFA" Offset="0.5" />
    <GradientStop Color="#FFFEFEFE" Offset="1" />
    </LinearGradientBrush>
    </Border.Background>
    <Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition />
    <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Ellipse x:Name="Off" Width="14" Height="14" Stroke="#FF7A7A7A" StrokeThickness="2" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
    <Line x:Name="On" X1="0" Y1="0" X2="0" Y2="14" Stroke="#FF7A7A7A" StrokeThickness="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Grid>
    </Border>
    <Border BorderBrush="#FF939393" HorizontalAlignment="Left" x:Name="slider" Width="41" Height="27" BorderThickness="1" CornerRadius="3" RenderTransformOrigin="0.5,0.5" Margin="0">
    <Border.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="1" ScaleY="1" />
    <SkewTransform AngleX="0" AngleY="0" />
    <RotateTransform Angle="0" />
    <TranslateTransform X="0" Y="0" />
    </TransformGroup>
    </Border.RenderTransform>
    <Border.Background>
    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFF0F0F0" Offset="0" />
    <GradientStop Color="#FFCDCDCD" Offset="0.1" />
    <GradientStop Color="#FFFBFBFB" Offset="1" />
    </LinearGradientBrush>
    </Border.Background>
    </Border>
    </Grid>
    </DockPanel>
    <ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
    <Trigger.ExitActions>
    <BeginStoryboard Storyboard="{StaticResource OnUnchecking}" x:Name="OnUnchecking_BeginStoryboard" />
    </Trigger.ExitActions>
    <Trigger.EnterActions>
    <BeginStoryboard Storyboard="{StaticResource OnChecking}" x:Name="OnChecking_BeginStoryboard" />
    </Trigger.EnterActions>
    <Setter TargetName="On" Property="Stroke" Value="White" />
    <Setter TargetName="Off" Property="Stroke" Value="White" />
    <!-- Change Orange or Blue color here -->
    <Setter TargetName="BackgroundBorder" Property="Background" Value="{StaticResource CheckedOrange}" />
    <Setter TargetName="BackgroundBorder" Property="BorderBrush" Value="{StaticResource CheckedOrangeBorder}" />
    </Trigger>
    <Trigger Property="IsEnabled" Value="False">
    <!-- ToDo: Add Style for Isenabled == False -->
    <Setter Property="Opacity" Value="0.4" />
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>

  • 相关阅读:
    启动tomcat时jmx port被占用
    Intellij Idea下tomcat设置自动编译
    IDEA的快捷键的使用
    IDEA2017注册码
    hosts文件路径及文件介绍
    关于JAVA开发工具IDEA使用
    如何用Word编辑参考文献------这是引用一位大师的
    TDK标签在SEO中的应用
    简单的线条不简单的画
    HTML--网页自动跳转 5种方法
  • 原文地址:https://www.cnblogs.com/xiehaha123/p/11658472.html
Copyright © 2020-2023  润新知