您的位置:首页 > 其它

WPF 自定义属性和触发器

2015-07-07 16:01 344 查看
public class MEFACheckBox : CheckBox
    {

        //public enum CheckBoxSatus
        //{
        //    [Description("无")]
        //     None=-1,
        //    [Description("错")]
        //    error=0,
        //    [Description("对")]
        //    correct=1,
        //}
        public MEFACheckBox()
        {
            base.DefaultStyleKey = typeof(MEFACheckBox);
            base.IsThreeState = false;
            this.Click += MEFACheckBox_Click;
            CheckValue = "None";

        }
        public string CheckValue
        {
            get { return (string)GetValue(CheckValueProperty); }
            set { SetValue(CheckValueProperty, value); }
        }
        public static readonly DependencyProperty CheckValueProperty =
            DependencyProperty.Register("CheckValue", typeof(string), typeof(MEFACheckBox), <span style="color:#ff6666;">new UIPropertyMetadata("")</span>);
//这句话很重要不然触发器没用。
        static MEFACheckBox()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MEFACheckBox), new FrameworkPropertyMetadata(typeof(MEFACheckBox)));

        }
        private void MEFACheckBox_Click(object sender, RoutedEventArgs e)
        {

            switch (CheckValue)
            {
                //空--对
                case "None":
                    CheckValue = "correct";
                    break;
                //错--空
                case "error":
                    CheckValue = "None";
                    break;
                //对--错
                case "correct":
                    CheckValue = "error";
                    break;
                default:
                    break;

            }
        }

    }
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:l="clr-namespace:MEFA.Controls">
    <Style x:Key="MyButton1" TargetType="{x:Type CheckBox}">
        <!--<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="CheckBox">
                    <DockPanel>
                        <ContentPresenter DockPanel.Dock="Left" VerticalAlignment="Center" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="40"/>

                            </Grid.ColumnDefinitions>
                            <Rectangle Grid.Column="0" Grid.ColumnSpan="1" />
                            <TextBlock x:Name="txtBox"   />
                        </Grid>
                    </DockPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/>
                            <Setter TargetName="txtBox" Property="Text" Value="  ( √ ) "/>

                        </Trigger>
                        <Trigger Property="IsChecked" Value="{x:Null}">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="false">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/>
                            <Setter TargetName="txtBox" Property="Text" Value="  (   ) "/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>-->
    </Style>
    <Style    TargetType="{x:Type l:MEFACheckBox}" BasedOn="{StaticResource MyButton1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type l:MEFACheckBox}">
                    <DockPanel x:Name="ss">
                        <ContentPresenter DockPanel.Dock="Left" VerticalAlignment="Center"  />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="15"/>
                                <ColumnDefinition Width="10"/>
                                <ColumnDefinition Width="8"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock x:Name="txtBoxl" Text=" ( "  Grid.Column="0" Grid.ColumnSpan="1"/>
                            <Rectangle Grid.Column="1" Grid.ColumnSpan="1" />
                            <TextBlock x:Name="txtBox" Width="10"   />
                            <TextBlock x:Name="txtBoxr" Text=")" Grid.Column="2" Grid.ColumnSpan="1" />

                        </Grid>
                    </DockPanel>
                    <ControlTemplate.Triggers>
                        <!--<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="1">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                            <Setter TargetName="txtBox" Property="Text" Value=" "/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="-1">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                            <Setter TargetName="txtBox" Property="Text" Value="×"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="0">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                            <Setter TargetName="txtBox" Property="Text" Value="√"/>
                        </DataTrigger>
                        <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Red"/>
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="Foreground" Value="Red"/>
                        </Trigger>-->
                        <Trigger Property="CheckValue" Value="None">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                          
                            <Setter TargetName="txtBox" Property="Text" Value=" "/>
                        </Trigger>
                        <Trigger Property="CheckValue" Value="correct">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                            <Setter TargetName="txtBox" Property="Text" Value="√"/>
                        </Trigger>
                        <Trigger  Property="CheckValue" Value="error">
                            <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/>
                            <Setter TargetName="txtBox" Property="Text" Value="×"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: