zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/xiehaha123/p/11658472.html
Copyright © 2011-2022 走看看