0

问题:在 BarCheckItem 中,如果 BarCheckItem IsChecked,如何在其 DataTemplate 中设置边框样式?

我正在设计一个BarCheckItem. 为此,我在其中添加ContentTemplateDataTemplate一些在 MouseOver 上更改的颜色边框:

<dxb:BarCheckItem Name="barCheckItemRecord"
                  Command="..."
                  Cursor="Hand"
                  IsChecked="..."
                  IsVisible="..." >

      <dxb:BarCheckItem.ContentTemplate>
           <DataTemplate>
                  <StackPanel>
                      <Border x:Name="audioButtonInnerBorderLight">
                          <Canvas .../>
                      </Border>
                  </StackPanel>

                  <DataTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                             <Setter TargetName="audioButtonInnerBorderLight" Property="Background" Value="#30FFFFFF" />
                       </Trigger>
                  </DataTemplate.Triggers>

           </DataTemplate>
       </dxb:BarCheckItem.ContentTemplate>
</dxb:BarCheckItem>

我现在要做的是在BarCheckItemIsChecked.

问题是,我只知道如何在样式中使用触发器,如下所示:

<dxb:BarCheckItem Name="barCheckItemRecord" [all the code from above]>
...
<dxb:BarCheckItem.Style>
     <Style TargetType="{x:Type dxb:BarCheckItem}">
           <Setter Property="Background" Value="Red" />
                 <Style.Triggers>
                       <Trigger Property="IsChecked" Value="True">
                             <Setter Property="Background" Value="Blue" />
                       </Trigger>
                       <Trigger Property="IsChecked" Value="{x:Null}">
                             <Setter Property="Background" Value="Yellow" />
                       </Trigger>
                 </Style.Triggers>
      </Style>
</dxb:BarCheckItem.Style>
</dxb:BarCheckItem>

但我不知道如何从触发器指向边界 (x:Name="audioButtonInnerBorderLight")。因为触发器不知道边界在哪里。

我怎样才能做出类似以下的工作?:

<Style TargetType="{x:Type dxb:BarCheckItem}">
<Trigger Property="IsChecked" Value="True">
     <Setter TargetName="audioButtonInnerBorderLight" Property="Background" Value="Purple" />
</Trigger>
</Style>

注意:我认为最好的办法是BarCheckItem使用Templatesetter 将边框放在 中的 ContentTemplate 中。但看起来 BarCheckItems 不允许模板化。

4

2 回答 2

1

您应该将这些触发器添加到 DataTemplate :

  <dxb:BarCheckItem Name="barCheckItemRecord"
              Command="..."
              Cursor="Hand"
              IsChecked="..."
              IsVisible="..." >

        <dxb:BarCheckItem.ContentTemplate>
            <DataTemplate>
                <StackPanel>
                    <Border x:Name="audioButtonInnerBorderLight">
                        <Canvas .../>
                    </Border>
                </StackPanel>

                <DataTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="audioButtonInnerBorderLight" Property="Background" Value="#30FFFFFF" />
                    </Trigger>

                    <DataTrigger Binding="{Binding Path=IsChecked,RelativeSource={RelativeSource AncestorType={x:Type dxb:BarCheckItem}}}" Value="True">
                        <Setter TargetName="audioButtonInnerBorderLight" Property="Background" Value="Blue" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=IsChecked,RelativeSource={RelativeSource AncestorType={x:Type dxb:BarCheckItem}}}"  Value="{x:Null}">
                        <Setter TargetName="audioButtonInnerBorderLight" Property="Background" Value="Yellow" />
                    </DataTrigger>
                </DataTemplate.Triggers>

            </DataTemplate>
        </dxb:BarCheckItem.ContentTemplate>
    </dxb:BarCheckItem>
于 2013-05-29T11:05:24.350 回答
0

我终于找到了最好的方法来做到这一点。

我所做的是在样式中添加 ContentTemplate,并从那里使用触发器:

<dxb:BarCheckItem ...>

     <dxb:BarCheckItem.Style>
         <Style TargetType="{x:Type dxb:BarCheckItem}">
             <Setter Property="ContentTemplate">
                 <Setter.Value>
                     <DataTemplate>
                          <StackPanel>
                              <Border x:Name="audioButtonInnerBorderLight">
                                  <Canvas .../>
                              </Border>
                          </StackPanel>

                          <DataTemplate.Triggers>
                              <Trigger Property="IsMouseOver" Value="true">
                                   <Setter TargetName="audioButtonInnerBorderDark" Property="Background" Value="#30FFFFFF" />
                              </Trigger>
                          </DataTemplate.Triggers>
                      </DataTemplate>
                   </Setter.Value>
               </Setter>

               <Style.Triggers>
                   <Trigger Property="IsChecked" Value="True">
                       <Setter Property="ContentTemplate">
                           <Setter.Value>
                                <DataTemplate>
                                     <StackPanel>
                                          <Border x:Name="audioButtonInnerBorderCHECKED">
                                               <Canvas .../> (different styles here)
                                          </Border>
                                     </StackPanel>
                                </DataTemplate>
                            </Setter.Value>
                       </Setter>
                   </Trigger>
              </Style.Triggers>
         </Style>
      </dxb:BarCheckItem.Style>
 </dxb:BarCheckItem>
于 2013-05-29T22:56:06.650 回答