Как я могу установить флажок WPF внутри области, на которую можно кликнуть? - PullRequest
5 голосов
/ 21 мая 2011

Если я создаю элемент управления CheckBox в WPF (без содержимого - мне нужна только часть проверки / снятия флажка), он отображает «прямоугольник» (трехмерный прямоугольник, который имеет или не имеет проверкупометить в нем) в верхнем левом углу элемента управления.

Можно ли вместо этого поместить визуальный элемент "box" в центр элемента управления CheckBox?То есть центрированы как горизонтально, так и вертикально?Примерно так:

enter image description here

Я могу получить что-то визуально похожее на это, установив CheckBox HorizontalAlignment и VerticalAlignment в Center.Это заставляет элемент управления CheckBox уменьшаться до размера его визуального элемента «box», и затем он центрируется внутри его родителя.Однако тогда он реагирует только на нажатия на визуальном элементе «прямоугольник», который представляет собой гораздо меньшую и более неудобную цель.

1 Ответ

0 голосов
/ 21 мая 2011

Вы можете изменить шаблон флажка.Самый простой способ - скопировать шаблон по умолчанию, используя что-то вроде StyleSnooper , а затем отредактировать его для ваших нужд примерно так:

<ControlTemplate>
  <BulletDecorator Background="Transparent">
    <aero:BulletChrome Width="13" Height="13" Background="{TemplateBinding Panel.Background}"
                       BorderBrush="{TemplateBinding Border.BorderBrush}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}"
                       RenderPressed="{TemplateBinding ButtonBase.IsPressed}" IsChecked="{TemplateBinding ToggleButton.IsChecked}" />
  </BulletDecorator>
  <ControlTemplate.Triggers>
    <Trigger Property="ContentControl.HasContent" Value="True">
      <Setter Property="FrameworkElement.FocusVisualStyle">
        <Setter.Value>
          <Style TargetType="{x:Type IFrameworkInputElement}">
            <Setter Property="Control.Template">
              <Setter.Value>
                <ControlTemplate>
                  <Rectangle Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
                             StrokeThickness="1" StrokeDashArray="1 2" Margin="14,0,0,0" SnapsToDevicePixels="True" />
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
        </Setter.Value>
      </Setter>
      <Setter Property="Control.Padding" Value="4,0,0,0" />
    </Trigger>
    <Trigger Property="UIElement.IsEnabled" Value="False">
      <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...