мне удалось получить еще с моим только для чтения флажок после небольшого перерыва и теперь имеют функциональные возможности, я хочу в достаточно элегантной форме. Проблема в том, что я использовал немного взлома, чтобы заставить его работать, хотя это не катастрофа, было бы неплохо сделать это лучше.Добавление пользовательского свойства зависимостей для шаблона управления в XAML
Напомню: я хочу, чтобы флажок регулярного поиска не проверялся при щелчке по нему, вместо этого событие click запускает фоновый рабочий, который впоследствии вызывает обновление переменной. Эта переменная привязана к checkbox.ischecked и затем обновляется с новым значением.
Я хотел бы использовать шаблон управления на основе идеи здесь:
A read-only CheckBox in C# WPF
Я модифицированном это и раздел материал, который я думал, что я не нужен (возможно неосторожно) и в конечном итоге с :
<ResourceDictionary 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">
<!-- -->
<Style x:Key="ReadOnlyCheckBoxStyle" TargetType="{x:Type CheckBox}" >
<Setter Property="Control.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="{TemplateBinding Tag}">
</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="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Этот флажок работает, как описано выше, и я называю это так:
<CheckBox x:Name="uiComboBox" Content="Does not set the backing property, but responds to it."
Style="{StaticResource ReadOnlyCheckBoxStyle}" Tag="{Binding MyBoolean}" Click="uiComboBox_Click"/>
Хак, который я сделал, должен был использовать свойство «Tag» DependencyProperty для переноса привязки данных в шаблон управления. Это обходит любой механизм, который обычно вызывает проверку флажка. Чтобы вернуться в нормальный режим, просто измените привязку к тегу к привязке к IsChecked, а внутри BulletDecorator установите TemplateBinding для IsChecked вместо тега.
Так что я думаю, мои вопросы:
- У меня неправильный конец палки? Есть ли место, где я могу переопределить любой механизм, заставляющий ящик самостоятельно проверять? Возможно, в ControlTemplate Triggers?
- Это хорошая идея, чтобы обойти любые запасные XAML, которые, как мне кажется, только что ввели из CheckBox по умолчанию или я должен попытаться сохранить полную замену для всех стилей?
- Если я не слишком сумасшедший, могу ли добавить свойство зависимостей в XAML, чтобы мне не пришлось использовать свойство Tag?
- Мне также приходит в голову, что, возможно, я действительно хочу, это кнопка управления, которая выглядит как флажок, возможно, невидимая кнопка с обычным анимированным флажком сверху, на который я привязываю данные к графике. Любые мысли по этому плану также будут очень желанными.
Большое спасибо
Ed