CheckBox с тремя состояниями

265
27 апреля 2017, 12:36

Возможно ли создать CheckBox с тремя состояниями: не установлено, включено, исключено? Что-то вроде того, что ниже:



Answer 1

Есть свойство специально для этого IsThreeState

MainWindow.xaml

<Grid>
    <CheckBox 
       Content="CheckBox" 
       HorizontalAlignment="Left" 
       Margin="0,0,0,0" 
       VerticalAlignment="Top" 
       IsThreeState="True" 
       Indeterminate="CheckBox_Indeterminate" 
       Checked="CheckBox_Checked" 
       Unchecked="CheckBox_Unchecked"
    />
</Grid>

MainWindowXaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void CheckBox_Indeterminate(object sender, RoutedEventArgs e)
    {
        this.Title = "Неопределено";
    }
    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        this.Title = "Выбран";
    }
    private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
    {
        this.Title = "Не выбран";
    }
}

Если нужно с картинками, задаем свой стиль

<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                    <DockPanel>
                        <Image x:Name="checkBoxImage" Width="16" Height="16"></Image>
                        <ContentPresenter Margin="4,0,0,0" VerticalAlignment="Center"/>
                    </DockPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="false">
                        <Setter TargetName="checkBoxImage" Property="Source" Value="/Images/uncheck.png"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="true">
                        <Setter TargetName="checkBoxImage" Property="Source" Value="/Images/check.png"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="{x:Null}">
                        <Setter TargetName="checkBoxImage" Property="Source" Value="/Images/indeterminate.png"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Answer 2

Возможно, определите свой стиль. Пример:

<Style x:Key="CustomCheckBox" TargetType="{x:Type CheckBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <StackPanel Orientation="Horizontal">
                    <Image x:Name="imageCheckBox" Width="30" Height="30" />
                    <ContentPresenter VerticalAlignment="Center" />
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="False">
                        <Setter TargetName="imageCheckBox" Property="Source" Value="..." />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="imageCheckBox" Property="Source" Value="..." />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="{x:Null}" >
                        <Setter TargetName="imageCheckBox" Property="Source" Value="..." />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Источник

Привязку чекбокса нужно сделать к Nullable полю типа bool?.

READ ALSO
собрать строку из нескольких тхт с определенным названием

собрать строку из нескольких тхт с определенным названием

Есть папка, в ней есть тхт файлыНазвание тхт файлов таковы test1,test2,test3,test4, также есть и другие тхт файлы, у которых имена такие типа: text1,text2,text3,text4

254
Сделать выборку колонок из DataGridViev

Сделать выборку колонок из DataGridViev

Очень нужна помощь в заданииЕсть на форме DataGridView, в которую считываются данные из базы данных

205
BackgroundWorker и два разных события DoWork

BackgroundWorker и два разных события DoWork

Как в событии DoWork сделать два разных обработчика? У меня есть две задачи которые нужно отображать в прогресс-бар

202
Yii2: GridView &#169; Kartik ссылки с pjax

Yii2: GridView © Kartik ссылки с pjax

Если использовать параметр pjax:

379