CheckBox только для чтения в C# WPF

pip install -U setuptools и easy_install помещали информацию о яйцах в неправильный каталог.

Затем я просто переустановил apt-get install python-dev. Позвольте мне установить драйверы, которые я хочу после этого

18
задан 28 May 2009 в 16:41
поделиться

4 ответа

Этот ответ не является Вашим вопросом, но он отвечает на вопрос из заголовка.

Флажок в WPF не имеет IsReadOnly свойство. Но, подобное поведение достигается с помощью свойств IsHitTestVisible="False" и Focusable="False"

      <CheckBox IsChecked="True"
                IsHitTestVisible="False"
                Focusable="False"
                Content="Some Text"/>

или

      <CheckBox IsChecked="{Binding IsEnabled}"
                IsHitTestVisible="False"
                Focusable="False"
                Content="Some Text"/>
0
ответ дан 30 November 2019 в 08:27
поделиться

Используйте проверку, чтобы заблокировать переключение логического значения, если вы этого не хотите - http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

Это гораздо менее страшно, чем другой ответ или подключение Clicked

0
ответ дан 30 November 2019 в 08:27
поделиться

Я не думаю, что создание для этого всего элемента управления необходимо. Проблема, с которой вы сталкиваетесь, возникает из-за того, что место, где вы видите «чек», на самом деле не является флажком, это пуля. Если мы посмотрим на ControlTemplate для CheckBox, то увидим, как это происходит (хотя мне больше нравится шаблон Blend). Как часть этого, даже если ваша привязка к свойству IsChecked установлена ​​на OneWay, оно все еще обновляется в пользовательском интерфейсе, даже если оно не устанавливает значение привязки.

Таким образом, действительно простой способ исправить это , заключается в том, чтобы просто изменить ControlTemplate для рассматриваемого флажка.

Если мы используем Blend для захвата шаблона элемента управления, мы увидим пулю внутри ControlTemplate, который представляет фактическую область флажка.

        <BulletDecorator SnapsToDevicePixels="true"
                         Background="Transparent">
            <BulletDecorator.Bullet>
                <Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}"
                                                       BorderBrush="{TemplateBinding BorderBrush}"
                                                       IsChecked="{TemplateBinding IsChecked}"
                                                       RenderMouseOver="{TemplateBinding IsMouseOver}"
                                                       RenderPressed="{TemplateBinding IsPressed}" />
            </BulletDecorator.Bullet>
            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              Margin="{TemplateBinding Padding}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              RecognizesAccessKey="True" />
        </BulletDecorator>

Здесь IsChecked и RenderPressed то, что на самом деле вызывает появление "Чека", чтобы исправить это, мы можем удалить привязку из свойства IsChecked в ComboBox и использовать его для замены TemplateBinding в свойстве IsChecked Bullet.

Вот небольшой пример, демонстрирующий желаемый эффект, обратите внимание, что для сохранения Vista CheckBox посмотрите PresentationFramework В проект необходимо добавить .Aero dll.

<Window x:Class="Sample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
    Title="Window1"
    Height="300"
    Width="300">
<Window.Resources>
    <SolidColorBrush x:Key="CheckBoxFillNormal"
                     Color="#F4F4F4" />
    <SolidColorBrush x:Key="CheckBoxStroke"
                     Color="#8E8F8F" />
    <Style x:Key="EmptyCheckBoxFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle SnapsToDevicePixels="true"
                               Margin="1"
                               Stroke="Black"
                               StrokeDashArray="1 2"
                               StrokeThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="CheckRadioFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle SnapsToDevicePixels="true"
                               Margin="14,0,0,0"
                               Stroke="Black"
                               StrokeDashArray="1 2"
                               StrokeThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="CheckBoxStyle1"
           TargetType="{x:Type CheckBox}">
        <Setter Property="Foreground"
                Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
        <Setter Property="Background"
                Value="{StaticResource CheckBoxFillNormal}" />
        <Setter Property="BorderBrush"
                Value="{StaticResource CheckBoxStroke}" />
        <Setter Property="BorderThickness"
                Value="1" />
        <Setter Property="FocusVisualStyle"
                Value="{StaticResource EmptyCheckBoxFocusVisual}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <BulletDecorator SnapsToDevicePixels="true"
                                     Background="Transparent">
                        <BulletDecorator.Bullet>
                            <Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}"
                                                                   BorderBrush="{TemplateBinding BorderBrush}"
                                                                   RenderMouseOver="{TemplateBinding IsMouseOver}" />
                        </BulletDecorator.Bullet>
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          Margin="{TemplateBinding Padding}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          RecognizesAccessKey="True" />
                    </BulletDecorator>
                    <ControlTemplate.Triggers>
                        <Trigger Property="HasContent"
                                 Value="true">
                            <Setter Property="FocusVisualStyle"
                                    Value="{StaticResource CheckRadioFocusVisual}" />
                            <Setter Property="Padding"
                                    Value="4,0,0,0" />
                        </Trigger>
                        <Trigger Property="IsEnabled"
                                 Value="false">
                            <Setter Property="Foreground"
                                    Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel>
        <CheckBox x:Name="uiComboBox"
                  Content="Does not set the backing property, but responds to it.">
            <CheckBox.Style>
                <Style TargetType="{x:Type CheckBox}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type CheckBox}">
                                <BulletDecorator SnapsToDevicePixels="true"
                                                 Background="Transparent">
                                    <BulletDecorator.Bullet>
                                        <Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}"
                                                                               BorderBrush="{TemplateBinding BorderBrush}"
                                                                               RenderMouseOver="{TemplateBinding IsMouseOver}"
                                                                               IsChecked="{Binding MyBoolean}">
                                        </Microsoft_Windows_Themes:BulletChrome>
                                    </BulletDecorator.Bullet>
                                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                      Margin="{TemplateBinding Padding}"
                                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                      RecognizesAccessKey="True" />
                                </BulletDecorator>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="HasContent"
                                             Value="true">
                                        <Setter Property="FocusVisualStyle"
                                                Value="{StaticResource CheckRadioFocusVisual}" />
                                        <Setter Property="Padding"
                                                Value="4,0,0,0" />
                                    </Trigger>
                                    <Trigger Property="IsEnabled"
                                             Value="false">
                                        <Setter Property="Foreground"
                                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </CheckBox.Style>
        </CheckBox>

        <TextBlock Text="{Binding MyBoolean, StringFormat=Backing property:{0}}" />

        <CheckBox IsChecked="{Binding MyBoolean}"
                  Content="Sets the backing property." />
    </StackPanel>
</Grid>
</Window>

И код позади, с нашим поддерживающим логическим значением:

public partial class Window1 : Window, INotifyPropertyChanged
{
    public Window1()
    {
        InitializeComponent();

        this.DataContext = this;
    }
    private bool myBoolean;
    public bool MyBoolean
    {
        get
        {
            return this.myBoolean;
        }
        set
        {
            this.myBoolean = value;
            this.NotifyPropertyChanged("MyBoolean");
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    #endregion
}
5
ответ дан 30 November 2019 в 08:27
поделиться

Я пытался создать свой общий стиль / шаблон ReadOnlyCheckBox, но у меня возникла проблема с привязкой к данным. В этом примере вы привязываетесь непосредственно к данным из определения ControlTemplate, но, конечно, это не совсем то, что я хочу, поскольку я хочу иметь возможность объявить новый флажок примерно так:

        <CheckBox x:Name="uiComboBox" Content="Does not set the backing property, but responds to it."
Style="{StaticResource ReadOnlyCheckBoxStyle}" IsChecked="{Binding MyBoolean}"  Click="uiComboBox_Click"/>

За исключением, конечно, тех случаев, когда я это делаю а затем установите триггер события для пули как TemplateBinding для IsChecked. У меня есть именно то, с чего я начал! Думаю, я не понимаю, почему установка привязки непосредственно в пуле отличается от установки IsChecked, а затем привязки к ней, не так ли? • TemplateBinding - это просто способ ссылки на то, что установлено в свойствах создаваемого элемента управления? Как Click запускает обновление пользовательского интерфейса, даже если данные не обновляются? Есть ли триггер для Click, который я могу переопределить, чтобы остановить обновление?

У меня все ресурсы DictionaryResource работают нормально, так что я доволен, приветствую указатель.

Еще мне было любопытно, если он можно уменьшить мой шаблон Control / Style с помощью параметра BasedOn в стиле, тогда я бы переопределил только те вещи, которые мне действительно нужно изменить, а не объявлять много вещей, которые я считаю частью стандартного шаблона. Я могу поиграть с этим.

Ура

изд

приветствует указатель.

Еще мне было любопытно, можно ли уменьшить мой шаблон Control / Style с помощью параметра BasedOn в стиле, тогда я бы переопределил только те вещи, которые мне действительно нужно изменить, а не объявление множества вещей, которые я считаю частью стандартного шаблона. Я могу поиграть с этим.

Ура

изд

приветствует указатель.

Еще мне было любопытно, можно ли уменьшить мой шаблон Control / Style с помощью параметра BasedOn в стиле, тогда я бы переопределил только те вещи, которые мне действительно нужно изменить, а не объявление множества вещей, которые я считаю частью стандартного шаблона. Я могу поиграть с этим.

Ура

изд

0
ответ дан 30 November 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: