2012-06-13 4 views
0

Я хочу центрировать и растягивать checkbox in UniformGrid 's cell.
Я пытался сделать это во многих отношениях:Центр checkbox in Ячейки UniformGrid в WPF

<UniformGrid> 
     <CheckBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
        HorizontalContentAlignment="Center" VerticalContentAlignment="Center" /> 
     <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" /> 
     <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" ClipToBounds="True" /> 
     <CheckBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="True" /> 

но он не удовлетворяет меня, потому что я хочу натяжкой (так же, как в ячейке (0,0)) и центра (так же, как в (1,0)) те, флажки в своих ячейках одновременно.

Как я могу это сделать?


[править 1]

Я пытаюсь сделать так, чтобы я не должен щелкнуть маленькую проверку, но вместо этого можно нажать на всю ячейку.

[править 2]

На самом деле я хочу, чтобы добавить эти флажки из C# код, так что если решение сделано в XAML не является «портативный» на языке С # это будет не очень полезно.

+0

Вы пытаетесь сделать так, что вам не нужно нажать на маленькую проверку, но вместо этого можно нажать на всю ячейку? – Andy

+0

Да. Извините, я не объяснил это четко. –

ответ

5

Если я использую эту простую разметку значений Stretch по умолчанию:

<UniformGrid> 
    <CheckBox Content="This is a checkbox" /> 
    <CheckBox Content="This is a checkbox" /> 
    <CheckBox Content="This is a checkbox" /> 
    <CheckBox Content="This is a checkbox" /> 
</UniformGrid> 

Я могу щелкнуть в любом месте в каждой ячейке UniformGrid, чтобы проверить и снимите флажок в этой ячейке.

Функционально это делает то, что вы хотите. если вы хотите изменить внешний вид флажка, вы можете использовать ControlTemplate.

Если вы не хотите, чтобы изменить размер CheckBox, и вы просто хотите, чтобы центр его визуально, находясь в состоянии нажать на ячейку, чтобы проверить это, вы можете использовать шаблон:

<CheckBox> 
    <CheckBox.Template> 
     <ControlTemplate TargetType="{x:Type CheckBox}"> 
      <Grid Background="Transparent"> 
       <CheckBox IsChecked="{TemplateBinding Property=IsChecked}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      </Grid> 
     </ControlTemplate> 
    </CheckBox.Template> 
</CheckBox> 

EDIT:

Чтобы применить его как ресурс во время выполнения, напишите XAML в разделе ресурсов соответствующей области. Вы можете поместить его в словаре местных ресурсов, если вам нужно только это в одном элементе управления, или если вы хотите получить доступ к нему во всем мире, положить его в App.xaml так:

<Application.Resources> 
    <ControlTemplate x:Key="StretchedCheckBox" TargetType="{x:Type CheckBox}"> 
     <Grid Background="Transparent"> 
      <CheckBox IsChecked="{TemplateBinding Property=IsChecked}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
     </Grid> 
    </ControlTemplate> 
</Application.Resources> 

Обратите внимание, как это имеет ключ "StretchedCheckBox".Теперь вы можете использовать, чтобы применить его в коде:

ControlTemplate stretchedTemplate = FindResource("StretchedCheckBox") as ControlTemplate; 

CheckBox chkBox = new CheckBox(); 
chkBox.Template = stretchedTemplate; 
+1

Вам нужно будет x: Указать стиль внутреннего флажка, иначе вы закончите переполнение стека. – Andy

+0

+1 для шаблона CheckBox, который центрирует CheckBox, все еще позволяя вам щелкнуть в любом месте сетки, чтобы проверить/снять отметку – Rachel

+0

@ Andy Как я могу воспроизвести этот переполнение стека? Он отлично работает для меня. –

1

Я не думаю, что вы можете повлиять на размер CheckBox, как, что, поскольку размер предопределено в шаблоне управления

Одно решение будет использовать LayoutTransform масштабировать CheckBox быть больше

<CheckBox> 
    <CheckBox.LayoutTransform> 
     <ScaleTransform ScaleX="5" ScaleY="5" /> 
    </CheckBox.LayoutTransform> 
</CheckBox> 

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

Другим альтернативным решением является копирование example CheckBox template from MSDN, и создать больше CheckBox

Смежные вопросы