Podařilo se mi dostat dál s mým čtení políčko jen po chvilce přestávky a nyní mají funkčnost chci v přiměřeně elegantní formu. Problém je, že jsem použil trochu hack, aby to fungovalo, i když to není katastrofa, že by bylo hezké, aby to lépe.
Pro připomenutí: Chci pravidelný vypadající políčka, která nemá vlastní kontrolu, když na něj klepnete, namísto toho událost click spouští pracovník pozadí, které později způsobí proměnné, které mají být aktualizovány. Tato proměnná je vázán na checkbox.ischecked a to je pak aktualizován s novou hodnotou.
Chtěl bych použít kontrolní šablony založené na myšlence zde:
Pouze ke čtení CheckBox v C # WPF
Jsem upravil to i vynechají věci myslel jsem nepotřeboval (možná nerozumně) a skončil s:
<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>
Toto políčko funguje, jak je popsáno výše, a říkám to takhle:
<CheckBox x:Name=uiComboBox Content=Does not set the backing property, but responds to it.
Style={StaticResource ReadOnlyCheckBoxStyle} Tag={Binding MyBoolean} Click=uiComboBox_Click/>
Hack jsem měl použít ‚Tag‘ DependencyProperty nést datové vazby do řídící šablony. To obchází bez ohledu na mechanismus je obvykle způsobuje políčko pro vlastní kontrolu. Chcete-li se vrátit do normálního políčko s hereckou jen změnit vazby na záznamu k navázání na IsChecked a uvnitř BulletDecorator nastavit TemplateBinding na IsChecked místo Tag.
Takže myslím, že mé otázky jsou:
- Už jsem dostal špatný konec hůl? Je tam místo, kde můžu přepsat cokoliv mechanismus způsobuje políčko vlastní kontrolu? Možná, že v ControlTemplate Triggers?
- Je to dobrý nápad jít kolem eliminuje jakékoliv náhradní XAML, že podle mého názoru je právě přinesl z výchozího CheckBox, nebo bych se měl snažit udržet úplnou náhradu za všechny styly?
- Jestli to, co dělám, je příliš bláznivé, můžu přidat vlastnost závislost na XAML, takže nemám používat vlastnost Tag?
- Také se mi, že snad to, co opravdu chci, je ovládací prvek tlačítko, které vypadá jako zaškrtávací políčko, možná neviditelná tlačítka s obvyklým animované políčka nahoře, kterou jsem se vážou data do grafikou. Jakékoli myšlenky na tomto plánu by také bylo velmi vítané.
Díky moc
Ed













