以下是我的代码
<Window x:Class="ScrollTester.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
这里我为堆栈面板中使用的扩展器的头设置了datatemplate
<DataTemplate x:Key="titleText">
<Border Background="Green" Height="24">
<TextBlock Text="{Binding}"
Width="{Binding
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type Expander}},
Path=ActualWidth}"/>
</Border>
</DataTemplate>
<Style TargetType="{x:Type Expander}">
<Setter Property="Margin" Value="1,3"/>
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="HeaderTemplate" Value="{StaticResource titleText}"/>
</Style>
</Window.Resources>
我有一个用于堆栈面板的滚动查看器
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel>
<Expander IsExpanded="True" x:Name="general" Header="General">
<StackPanel Orientation="Horizontal">
<GroupBox Header="Mode Control">
<StackPanel>
<CheckBox Content="RESET"/>
<CheckBox Content="MAKEUP" IsChecked="True"/>
<CheckBox Content="POWERDOWN"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Mode Control">
<StackPanel>
<CheckBox Content="RESET"/>
<CheckBox Content="MAKEUP" IsChecked="True"/>
<CheckBox Content="POWERDOWN"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Mode Control">
<StackPanel>
<CheckBox Content="RESET"/>
<CheckBox Content="MAKEUP" IsChecked="True"/>
<CheckBox Content="POWERDOWN"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Mode Control">
<StackPanel>
<CheckBox Content="RESET"/>
<CheckBox Content="MAKEUP" IsChecked="True"/>
<CheckBox Content="POWERDOWN"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Mode Control">
<StackPanel>
<CheckBox Content="RESET"/>
<CheckBox Content="MAKEUP" IsChecked="True"/>
<CheckBox Content="POWERDOWN"/>
</StackPanel>
</GroupBox>
</StackPanel>
</Expander>
</StackPanel>
</ScrollViewer>
这里的问题是即使堆叠面板的宽度更大,滚动条也不起作用。
我可以理解为什么会发生这种情况,因为将扩展器的宽度设置为其父级,因此滚动条不起作用
但我希望滚动条工作和启用以及带标题样式的datatemplate
任何人都可以提供解决方案吗?
答案 0 :(得分:0)
您尝试做的事情不会起作用,因为扩展程序标题的宽度还包括用于展开和折叠控件的按钮。
以这种方式思考:控件的标题区域包含两个并排的元素,展开/折叠按钮和标题&#34;内容&#34;。您将标题内容部分(您的Border
元素)的宽度绑定到扩展器控件的宽度,但这并不会减去展开/折叠按钮的宽度。因此你的布局会中断。
如果标题内容部分位于后面展开/折叠按钮,那么您的方法可行,但不幸的是,这不是默认Expander
控件模板的设计方式。< / p>
我只是猜测,但在我看来,你只是想设置扩展器的背景颜色。不幸的是,再次由于默认控制模板,这是不可能的:
如果你设置了扩展器的Background
属性,这个将改变标题的颜色,但它也会改变内容区域的颜色,这可能不是& #39; t你想要什么
在标题中添加另一个元素(例如您的Border
)并尝试将其放入&#34;延伸&#34;到控件的宽度(通过将HorizontalContentAlignment
属性设置为Stretch
)也不会起作用,因为放置标题的元素在控件模板中被硬编码为左对齐。
据我所知,实现所需内容的唯一方法是为扩展器编写自己的控件模板并使用它。你应该可以在SO或谷歌上找到一些这方面的例子。