在Listview的datatemplate中更改checkbox的属性

时间:2014-09-28 00:03:20

标签: windows listview windows-store-apps windows-phone-8.1

我有用户控件,我用它作为listview的datatemplate。此模板的内容是一个简单的复选框。

<UserControl> 
    <UserControl.Resources>
        <Style TargetType="CheckBox">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="CheckBox">
                      ......
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
    <Grid>
        <CheckBox Content="{Binding CheckBoxContent}"
                  VerticalAlignment="Center"/>
    </Grid>
</UserControl>

Listview就是这样的

<ListView Name="Optimization"
          ItemTemplate="{StaticResource CheckboxTemplate}"
          ItemsSource="{Binding checkboxList}"
          Width="Auto"
          FontSize="{ThemeResource TextStyleExtraLargeFontSize}"
          Margin="108,0,0,0"/>

我的问题是如何在复选框内的内容展示器中使用字体大小来获取Listview中提供的值,如上所述。

我搜索过,但所有选项都指向WPF,而且没有一个指向Windows手机或Windows应用商店。我还在contentPresenter的fontsize属性上尝试了templatedParent,但它看起来并不像Listview是模板的父级。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以通过ElementName绑定来完成。

定义UserControl时 - 为他设置一个x:名称

<UserControl
    x:Class="App1.CheckBoxUserControl"
    x:Name="CheckBoxControl"
    .............>
    ...
</UserControl>

首先将ContentPresenter的FontSize绑定到UserControl的FontSize

<UserControl.Resources>
            <Style TargetType="CheckBox">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="CheckBox">
                            <ContentPresenter FontSize="{Binding FontSize, ElementName=CheckBoxControl}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </UserControl.Resources>

然后只需将UserControl的FontSize绑定到ListView的FontSize即可。

<DataTemplate x:Key="CheckboxTemplate">
            <local:CheckBoxUserControl FontSize="{Binding FontSize, ElementName=Optimization}"/>
        </DataTemplate>