【问题标题】:I need an accordion control for WPF 4我需要 WPF 4 的手风琴控件
【发布时间】:2011-05-12 11:07:56
【问题描述】:

我正在寻找适用于 WPF .NET 4 的 Accordion 控件。

我知道 Codeplex 上的 WPF Toolkit 具有手风琴控件,但声明它与 .NET 3.5 兼容。它可以在版本 4 中使用吗?

【问题讨论】:

    标签: .net wpf controls accordion


    【解决方案1】:

    是的,工具包中的 Accordion 与 .NET 4 完全兼容

    【讨论】:

    • 谢谢 Bas,我已经添加了 WPF Toolkit dll 引用以及 xml 命名空间并开始使用 Accordion。但是它似乎没有正确显示:
    • 我认为这是预期的行为,如果您不喜欢外观可以更改控件模板。
    【解决方案2】:

    我们为带有扩展器的 ListBox 创建了一个自定义样式作为部分。这允许我们通过简单地设置扩展器的样式来自定义菜单项的外观(即摘要按钮、无效时为红色等)。下面是一个可以作为起点的代码 sn-p,您可以将其自定义为适合您的需求。注意:将 IsExpanded 与 IsSelected 绑定可以使一次仅打开一个扩展器,如果您希望一次打开多个扩展器,只需将其删除即可。

            <Style x:Key="VerticalListBoxWithAutoScroll" TargetType="{x:Type ListBox}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Grid>
                            <ScrollViewer x:Name="scrollviewer">
                                <ScrollViewer.Template>
                                    <ControlTemplate TargetType="{x:Type ScrollViewer}" >
                                        <Grid >
    
                                            <ScrollBar x:Name="PART_VerticalScrollBar" Orientation="Vertical" 
                                                               Value="{TemplateBinding VerticalOffset}"
                                                               Maximum="{TemplateBinding ScrollableHeight}"
                                                               ViewportSize="{TemplateBinding ViewportHeight}"
                                                               Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                                               Width="{Binding Width, ElementName=Panel}">
                                                <ScrollBar.Template>
                                                    <ControlTemplate>
                                                        <Track x:Name="PART_Track">
                                                            <Track.DecreaseRepeatButton>
                                                                <RepeatButton Command="ScrollBar.PageUpCommand" 
                                                                              Background="White" BorderBrush="Transparent"/>
                                                            </Track.DecreaseRepeatButton>
                                                            <Track.IncreaseRepeatButton>
                                                                <RepeatButton Command="ScrollBar.PageDownCommand" 
                                                                              Background="White" BorderBrush="Transparent"/>
                                                            </Track.IncreaseRepeatButton>
                                                            <Track.Thumb>
                                                                <Thumb BorderBrush="Transparent" 
                                                                       Background="White" Opacity="0.8" />
                                                            </Track.Thumb>
                                                        </Track>
                                                    </ControlTemplate>
                                                </ScrollBar.Template>
                                            </ScrollBar>
                                            <ScrollContentPresenter Height="Auto" VerticalAlignment="Center"/>
                                        </Grid>
                                    </ControlTemplate>
                                </ScrollViewer.Template>
                                <ItemsPresenter/>
                            </ScrollViewer>
                            <Grid x:Name="Panel">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <RepeatButton Grid.Row="0" x:Name="LineUpButton" Height="30" Width="80" HorizontalAlignment="Center" Opacity="0" Visibility="Collapsed"
                                      Style="{StaticResource ScrollBarLineButton}"
                                      Content="M 0 8 L 8 8 L 4 0 Z"       
                                      Command="{x:Static ScrollBar.LineUpCommand}"       
                                      CommandTarget="{Binding ElementName=scrollviewer}"
                                      ClickMode="Hover" />
                                <RepeatButton Grid.Row="2" x:Name="LineDownButton" Height="30" Width="80" HorizontalAlignment="Center" Opacity="0" Visibility="Collapsed"
                                      Style="{StaticResource ScrollBarLineButton}"
                                      Content="M 0 0 L 4 8 L 8 0 Z" 
                                      Command="{x:Static ScrollBar.LineDownCommand}"       
                                      CommandTarget="{Binding ElementName=scrollviewer}"
                                      ClickMode="Hover"/>
                            </Grid>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True"/>
                                    <Condition Property="ComputedVerticalScrollBarVisibility" SourceName="scrollviewer" Value="Visible"/>
                                </MultiTrigger.Conditions>
                                <MultiTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="LineUpButton" 
                                                             Storyboard.TargetProperty="Opacity" To="0.8" Duration="0:0:0.25"/>
                                            <DoubleAnimation Storyboard.TargetName="LineDownButton" 
                                                             Storyboard.TargetProperty="Opacity" To="0.8" Duration="0:0:0.25"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </MultiTrigger.EnterActions>
                                <MultiTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="LineUpButton" 
                                                             Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.25"/>
                                            <DoubleAnimation Storyboard.TargetName="LineDownButton" 
                                                             Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.25"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </MultiTrigger.ExitActions>
                                <Setter TargetName="LineUpButton" Property="Visibility" Value="Visible" />
                                <Setter TargetName="LineDownButton" Property="Visibility" Value="Visible" />
                            </MultiTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="ItemTemplate">
                <Setter.Value >
                    <DataTemplate>
                        <StackPanel Background="White">
                            <Expander Content="{Binding}"  Width="Auto" Header="{Binding DisplayName}"
                                  IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" >
                            </Expander>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

    【讨论】:

      【解决方案3】:

      是的,Accordian 控件适用于 .NET 4。这是一篇解释如何使用它的文章:

      http://www.c-sharpcorner.com/uploadfile/dpatra/538/

      【讨论】:

        猜你喜欢
        • 2014-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        相关资源
        最近更新 更多