为某些控件添加包装

Add wrapping to certain controls

我需要为我的 Radio Button 控件添加换行,只有一个 window。当单选按钮添加到不需要换行的不同页面时,我一直在尝试弄清楚如何有条件地从我的控件中删除或更改换行面板的值。

这是添加包装的编码。

XAML

<Style TargetType="auc:APRadioButtonListBox">
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
        <Setter Property="IsTabStop" Value="True" />
        <Setter Property="FontSize" Value="{StaticResource FontSize}" />
        <Setter Property="Margin" Value="-2,0,0,0" />
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <toolkit:WrapPanel Background="Transparent" ItemWidth="Auto" x:Name="RadioListWrapPanel" Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemTemplate">

C#

  public virtual ItemsPanelTemplate ItemsPanel { get; set; }

谁能告诉我如何在不换行的情况下将单选按钮添加到另一个页面。

由于您在应用程序级别应用了样式,因此它将隐式应用于与其目标类型匹配的所有控件。您有两种选择来获取不换行的页面...

  • 用省略换行的样式覆盖所需页面上的样式
  • 给默认样式你有一个键,并在需要的地方显式应用它,其他人不会有包装。

如果不需要换行的页面多于需要换行的页面,则后者有意义。考虑以下

<Style x:Key="WrappedRadioButtons" TargetType="auc:APRadioButtonListBox">
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
        <Setter Property="IsTabStop" Value="True" />
        <Setter Property="FontSize" Value="{StaticResource FontSize}" />
        <Setter Property="Margin" Value="-2,0,0,0" />
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <toolkit:WrapPanel Background="Transparent" ItemWidth="Auto" x:Name="RadioListWrapPanel" Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemTemplate">
</Style>

现在在需要应用该样式的页面中,可以进行如下操作:

<uac:APRadioButtonListBox Style="{StaticResource WrappedRadioButtons}" />

任何其他未明确引用此样式的都将采用默认设置。或者,您可以定义另一种没有换行的样式,并为其提供一个键,您可以将其应用于不需要换行的页面。

在不需要 WrapPanel 的页面上创建从基础派生的新样式并覆盖样式setter

<Style TargetType="auc:APRadioButtonListBox" 
       BasedOn="{StaticResource {x:Type auc:APRadioButtonListBox}}">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>

或简单地为 auc:APRadioButtonListBox 元素执行此操作:

<auc:APRadioButtonListBox>
    <auc:APRadioButtonListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </auc:APRadioButtonListBox.ItemsPanel>
</auc:APRadioButtonListBox>

或者在不设置 ItemsPanel 的资源字典中定义命名样式。默认样式将扩展它。在不需要包装的一页上使用命名样式:

<Style TargetType="auc:APRadioButtonListBox" x:Key="APRadioButtonListBoxStyle">
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
    <Setter Property="IsTabStop" Value="True" />
    <Setter Property="FontSize" Value="{StaticResource FontSize}" />
    <Setter Property="Margin" Value="-2,0,0,0" />
</Style>

<Style TargetType="auc:APRadioButtonListBox" BasedOn="{StaticResource APRadioButtonListBoxStyle}">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <toolkit:WrapPanel Background="Transparent" ItemWidth="Auto" x:Name="RadioListWrapPanel" Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>

<auc:APRadioButtonListBox Style="{StaticResource APRadioButtonListBoxStyle}"/>