您可以通过 WPF 样式将数据绑定到 CornerRadius 吗?
我有一个 Button 样式,似乎无法将边框的 CornerRadius 属性数据绑定到模板。 这是一个依赖属性,因此它应该是可数据绑定的。 我想知道我是否缺少正确使用的 XAML 语法?
<Style TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="FocusVisualStyle" Value="{DynamicResource MyButtonFocusVisual}"/>
<Setter Property="Background" Value="{DynamicResource MyButtonBackgroundBrush}"/>
<Setter Property="Foreground" Value="{DynamicResource MyButtonForegroundBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource MyButtonBorderBrush}"/>
<Setter Property="BorderThickness" Value="3"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="CornerRadius" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<!-- We use Grid as a root because it is easy to add more elements to customize the button -->
<Grid x:Name="Grid">
<Border x:Name="Border" CornerRadius="{TemplateBinding CornerRadius}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
和 CornerRadius="{TemplateBinding CornerRadius}" 都会给我错误“CornerRadius 无法识别或无法访问”。
I have a Button style and can't seem to property databind the border's CornerRadius property to the template. This is a dependency property, so it should be data bindable. I wonder if I'm missing the right XAML syntax to use?
<Style TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="FocusVisualStyle" Value="{DynamicResource MyButtonFocusVisual}"/>
<Setter Property="Background" Value="{DynamicResource MyButtonBackgroundBrush}"/>
<Setter Property="Foreground" Value="{DynamicResource MyButtonForegroundBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource MyButtonBorderBrush}"/>
<Setter Property="BorderThickness" Value="3"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="CornerRadius" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<!-- We use Grid as a root because it is easy to add more elements to customize the button -->
<Grid x:Name="Grid">
<Border x:Name="Border" CornerRadius="{TemplateBinding CornerRadius}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Both and CornerRadius="{TemplateBinding CornerRadius}" give me the error "CornerRadius is not recognized or is not accessible".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您尝试在类
Button
上设置/绑定CornerRadius
属性,但没有此类属性。 所以错误是预料之中的。You're trying to set/bind a
CornerRadius
property on classButton
, but there is no such property. So the error is expected.肯特是对的。 解决这个问题的方法是创建您自己的继承按钮类的自定义控件。 然后在该派生类中,创建一个依赖属性并将其注册到窗口的 CornerRadius 属性。 然后,您可以使用上面的代码,但不是在 Button 控件上设置 style 属性,而是在派生类上设置 style 属性。
Kent is right. A way around this is to create your own custom control that inherits from the button class. Then inside this derived class, create a dependency property and register it to the window for the CornerRadius property. Then you may use the above code, but instead of setting the style property on a Button control, set the style property on the derived class.
这是可能的
并且在后面的代码中:
End Class
It is possible
and in the back code:
End Class