Я успешно создал закругленный угол для флажка, прямо сейчас у меня проблемы с подключением шаблона элемента управления к другим флажкам. Можно ли как-то подключить шаблон элемента управления к флажку, сгенерированному из серверной части?
первая часть — это шаблон элемента управления, измененный, чтобы изменить квадратную рамку на закругленную рамку
вторая часть - это флажок, сгенерированный из бэкэнда и добавленный во внешний интерфейс.
<Window.Resources>
<Style x:Key = "OptionMarkFocusVisual">
<Setter Property = "Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin = "14,0,0,0" StrokeDashArray = "1 2" Stroke = "{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" SnapsToDevicePixels = "true" StrokeThickness = "1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<SolidColorBrush x:Key = "OptionMark.Static.Glyph" Color = "#FF212121"/>
<SolidColorBrush x:Key = "OptionMark.MouseOver.Background" Color = "#FFF3F9FF"/>
<SolidColorBrush x:Key = "OptionMark.MouseOver.Border" Color = "#FF5593FF"/>
<SolidColorBrush x:Key = "OptionMark.MouseOver.Glyph" Color = "#FF212121"/>
<SolidColorBrush x:Key = "OptionMark.Pressed.Background" Color = "#FFD9ECFF"/>
<SolidColorBrush x:Key = "OptionMark.Pressed.Border" Color = "#FF3C77DD"/>
<SolidColorBrush x:Key = "OptionMark.Pressed.Glyph" Color = "#FF212121"/>
<SolidColorBrush x:Key = "OptionMark.Disabled.Background" Color = "#FFE6E6E6"/>
<SolidColorBrush x:Key = "OptionMark.Disabled.Border" Color = "#FFBCBCBC"/>
<SolidColorBrush x:Key = "OptionMark.Disabled.Glyph" Color = "#FF707070"/>
<ControlTemplate x:Key = "CheckBoxTemplate1" TargetType = "{x:Type CheckBox}">
<Grid x:Name = "templateRoot" Background = "Transparent" SnapsToDevicePixels = "True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "Auto"/>
<ColumnDefinition Width = "*"/>
</Grid.ColumnDefinitions>
<Border x:Name = "checkBoxBorder" Background = "{TemplateBinding Background}" CornerRadius = "15" BorderBrush = "{TemplateBinding BorderBrush}" BorderThickness = "{TemplateBinding BorderThickness}" HorizontalAlignment = "{TemplateBinding HorizontalContentAlignment}" Margin = "1" VerticalAlignment = "{TemplateBinding VerticalContentAlignment}">
<Grid x:Name = "markGrid">
<Path x:Name = "optionMark" Data = "F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z " Fill = "{StaticResource OptionMark.Static.Glyph}" Margin = "1" Opacity = "0" Stretch = "None"/>
<Rectangle x:Name = "indeterminateMark" Fill = "{StaticResource OptionMark.Static.Glyph}" Margin = "2" Opacity = "0"/>
</Grid>
</Border>
<ContentPresenter x:Name = "contentPresenter" Grid.Column = "1" Focusable = "False" HorizontalAlignment = "{TemplateBinding HorizontalContentAlignment}" Margin = "{TemplateBinding Padding}" RecognizesAccessKey = "True" SnapsToDevicePixels = "{TemplateBinding SnapsToDevicePixels}" VerticalAlignment = "{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property = "HasContent" Value = "true">
<Setter Property = "FocusVisualStyle" Value = "{StaticResource OptionMarkFocusVisual}"/>
<Setter Property = "Padding" Value = "4,-1,0,0"/>
</Trigger>
<Trigger Property = "IsMouseOver" Value = "true">
<Setter Property = "Background" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.MouseOver.Background}"/>
<Setter Property = "BorderBrush" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.MouseOver.Border}"/>
<Setter Property = "Fill" TargetName = "optionMark" Value = "{StaticResource OptionMark.MouseOver.Glyph}"/>
<Setter Property = "Fill" TargetName = "indeterminateMark" Value = "{StaticResource OptionMark.MouseOver.Glyph}"/>
</Trigger>
<Trigger Property = "IsEnabled" Value = "false">
<Setter Property = "Background" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.Disabled.Background}"/>
<Setter Property = "BorderBrush" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.Disabled.Border}"/>
<Setter Property = "Fill" TargetName = "optionMark" Value = "{StaticResource OptionMark.Disabled.Glyph}"/>
<Setter Property = "Fill" TargetName = "indeterminateMark" Value = "{StaticResource OptionMark.Disabled.Glyph}"/>
</Trigger>
<Trigger Property = "IsPressed" Value = "true">
<Setter Property = "Background" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.Pressed.Background}"/>
<Setter Property = "BorderBrush" TargetName = "checkBoxBorder" Value = "{StaticResource OptionMark.Pressed.Border}"/>
<Setter Property = "Fill" TargetName = "optionMark" Value = "{StaticResource OptionMark.Pressed.Glyph}"/>
<Setter Property = "Fill" TargetName = "indeterminateMark" Value = "{StaticResource OptionMark.Pressed.Glyph}"/>
</Trigger>
<Trigger Property = "IsChecked" Value = "true">
<Setter Property = "Opacity" TargetName = "optionMark" Value = "1"/>
<Setter Property = "Opacity" TargetName = "indeterminateMark" Value = "0"/>
</Trigger>
<Trigger Property = "IsChecked" Value = "{x:Null}">
<Setter Property = "Opacity" TargetName = "optionMark" Value = "0"/>
<Setter Property = "Opacity" TargetName = "indeterminateMark" Value = "1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
----------------------------------------------
private void GenerateCheckbox()
{
CheckBox checkBoxTest = new CheckBox();
checkBoxTest.Content = "Test";
grid.Children.Add(checkBoxTest);
}
Вы можете искать ControlTemplate
в своем Resources
checkBoxTest.Template = (ControlTemplate)Resources["CheckBoxTemplate1"]
Это предполагает, что этот код написан внутри кода программной части Window
, где определен ресурс. Если нет, вам нужно будет выполнить поиск элемента, в котором находится ресурс. Вы также можете выполнить поиск ресурсов вашего приложения, определенных в Application
.
Я обновил свой ответ, так как явно неправильно понял, какой ресурс вы хотели применить. Я бы предложил размещать только соответствующий код.
гм, я потерялся, первый метод не может работать, а второй метод довольно странный, странно, вы можете видеть новый скриншот, которым я делюсь выше, сгенерированный флажок становится одной строкой