首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能解释一下我这种关于风格和数据人的行为吗?

有人能解释一下我这种关于风格和数据人的行为吗?
EN

Stack Overflow用户
提问于 2018-01-25 14:24:23
回答 1查看 36关注 0票数 1

基本上,我有一个复选框,它在视图模型中绑定了IsChecked属性。然后,在数据挖掘程序中计算此属性,以确定进度条的颜色。进度条本身是用我将要呈现的代码来设计的。

现在,这个代码起作用了:

代码语言:javascript
复制
<Style x:Key="CustomProgressBar" TargetType="ProgressBar">
   <Style.Triggers>
      <DataTrigger Value="True" Binding="{Binding Path=IsChecked}">
         <Setter Property="Background" Value="Red"/>
      </DataTrigger>
      <DataTrigger Value="False" Binding="{Binding Path=IsChecked}">
          <Setter Property="Background" Value="Yellow"/>
      </DataTrigger>
    </Style.Triggers>
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="ProgressBar">
                <Border BorderBrush="{DynamicResource ProgressBorderBrushColor}" BorderThickness="0" Background="{DynamicResource ProgressBackgroundColor}" CornerRadius="0" Padding="0">
                    <Grid x:Name="PART_Track">
                        <Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left">
                            <Rectangle.Style>
                                <Style TargetType="Rectangle">
                                    <Setter Property="Fill" Value="{Binding}"/>
                                </Style>
                            </Rectangle.Style>
                        </Rectangle>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但以下情况并非如此:

代码语言:javascript
复制
<Style x:Key="CustomProgressBar" TargetType="ProgressBar">
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="ProgressBar">
                <Border BorderBrush="{DynamicResource ProgressBorderBrushColor}" BorderThickness="0" Background="{DynamicResource ProgressBackgroundColor}" CornerRadius="0" Padding="0">
                    <Grid x:Name="PART_Track">
                        <Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left">
                            <Rectangle.Style>
                                <Style TargetType="Rectangle">
                                    <Style.Triggers>
                                        <DataTrigger Value="True" Binding="{Binding Path=IsChecked}">
                                            <Setter Property="Fill" Value="Red"/>
                                        </DataTrigger>

                                        <DataTrigger Value="False" Binding="{Binding Path=IsChecked}">
                                            <Setter Property="Fill" Value="Yellow"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Rectangle.Style>
                        </Rectangle>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

你能告诉我在第二个xaml中遗漏了什么或者哪里有问题吗?(不介意到边境地区)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 15:21:55

我认为这是反向的:第二个例子起作用,而第一个例子则不行。

第一个示例不起作用,因为Rectangle.Fill绑定没有意义。您正在将Fill绑定到任何ProgressBar.DataContext。将Rectangle定义更改为:

代码语言:javascript
复制
<Rectangle x:Name="PART_Indicator"
            HorizontalAlignment="Left"
            Fill="{TemplateBinding Background}" />

{TemplateBinding XYZ}{Binding Path=XYZ, RelativeSource={RelativeSource TemplatedParent}的一种短形式。它的意思是“绑定到应用此模板的控件上的属性XYZ”。在本例中,模板被应用于ProgressBar,因此我们将Rectangle.Fill绑定到进度条的Background。当Setters更新背景时,矩形也会被更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48445176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档