Как изменить ControlCemplateCheckBox на другую форму, сохраняя при этом поведение «Проверено» и «Не проверено» видимым? - PullRequest
1 голос
/ 06 марта 2012

Мне нужно сделать CheckBox, чтобы она выглядела как форма "(" вместо обычной квадратной формы, форма "(" должна иметь некоторое пространство внутри нее, чтобы пользователь мог наблюдать разницу при проверке и снятии отметки.Заранее спасибо

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Когда вы меняете шаблон элемента управления, вы в основном меняете его визуальное дерево.В таком случае вы потеряете визуализацию состояний, предусмотренных в элементах управления родных окон.Например, если вы измените шаблон кнопки, сначала при нажатии на нее ничего не происходит.

Если вы работаете с Dot.Net 4, вы можете использовать VisualState (рекомендуемый подход), например:в коде emybob

Если вы работаете в Dot.Net 3.5, вы не можете использовать VisualState, но вы можете использовать ControTemplate.Triggers http://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate.triggers.aspx

1 голос
/ 06 марта 2012

вам нужно изменить шаблон в стиле comboBox. Это пример круглого флажка:

   <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="CheckBox">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CheckStates">
                            <VisualState x:Name="Unchecked"/>
                            <VisualState x:Name="Checked">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="tick" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Indeterminate"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Ellipse x:Name="blackframe" Stroke="Black" Fill="Blue" Width="16" Height="16"/>
                    <Ellipse x:Name="background" Margin="2" Fill="AliceBlue" Width="12" Height="12"/>
                    <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="1" Margin="5,0,0,0"/>
                    <Path x:Name="tick" Fill="Black" Data="F1 M 4.325,7.852 C 4.175,7.852 4.026,7.807 3.900,7.720 L 0.325,5.262 C -0.016,5.027 -0.103,4.560 0.132,4.219 C 0.367,3.877 0.833,3.792 1.175,4.025 L 4.091,6.030 L 7.478,0.365 C 7.690,0.010 8.151,-0.107 8.506,0.106 C 8.861,0.319 8.978,0.779 8.765,1.135 L 4.969,7.486 C 4.863,7.664 4.688,7.790 4.485,7.834 C 4.432,7.846 4.378,7.852 4.325,7.852 L 4.325,7.852 Z" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

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

...