【发布时间】:2018-06-14 19:43:00
【问题描述】:
我正在使用带有自定义样式和控件模板的复选框。我也想将高度和宽度绑定移到样式上,但我似乎无法正确处理。
这里是 XAML 复选框
<CheckBox Style="{StaticResource MyCheckStyle}"
HorizontalAlignment="Center"
Height="{Binding FontSize,
Source={x:Static gap:Settings.Default},
Converter={StaticResource MyMathConverter},
ConverterParameter='x+10'}"
Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"
IsChecked="{Binding ValueT, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
/>
- 我正在尝试实现一个复选框,其高度(以像素为单位)比当前字体大小(以点为单位)大 10(一个 hack,但现在请忽略它)。
- 我将 Width 绑定到 ActualHeight 以便它们始终是方形的(否则我的自定义模板将允许任何尺寸)
- 我正在使用转换器(Ivan Krivyakov 的MathConverter)来计算。
- 我绑定的大小存储在从设置文件生成的设置类的静态实例中。
MyCheckStyle 目前如下:
<Style x:Key="MyCheckStyle" TargetType="{x:Type CheckBox}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="Template" Value="{StaticResource MyCheckBoxTemplate}" />
</Style>
到目前为止,这一切都完美无缺。但是我尝试将 Width 绑定移动到样式会使应用程序崩溃:
<!-- WIDTH BINDING. CAUSES A CRASH DUE TO ACCESS VIOLATION -->
<Setter Property="Width">
<Setter.Value>
<Binding>
<Binding.Source>
<RelativeSource Mode="Self"/>
</Binding.Source>
<Binding.Path>
<PropertyPath Path="ActualHeight"/>
</Binding.Path>
</Binding>
</Setter.Value>
</Setter>
我尝试移动 Height 绑定的尝试完全失败。我不知道如何在元素语法中复制“x:Static”标记扩展等。 Intellisense/ReSharper 对我帮助不大。
<Setter Property="Height">
<Setter.Value>
<Binding>
<!-- NO IDEA WHAT TO PUT HERE? -->
</Binding>
</Setter.Value>
</Setter>
</Style>
任何人都可以设置我的权利吗?我正在做的事情可能吗?
【问题讨论】:
标签: wpf xaml data-binding