2015-02-10 97 views
0

的ScrollViewer中下面的是我的代碼寬度影響外

<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

你試圖做的事情將無法正常工作,因爲擴展器頭部的寬度還包括用於展開和摺疊控件的按鈕。

想想這樣:控件的標題區域並排包含兩個元素,展開/摺疊按鈕和標題「content」。您將標題內容部分(您的Border元素)的寬度綁定到擴展器控件的寬度,但這不會減去展開/摺疊按鈕的寬度。因此你的佈局中斷了。

如果標題內容部分坐在背後展開/摺疊按鈕,然後你的方法是有效的,但不幸的是默認Expander控制模板不是如何設計的。

我只是猜測,但它看起來像我只是試圖設置擴展器的背景顏色。不幸的是,同樣是由於默認控件模板,這是不可能的:

  • 如果設置了擴展的Background財產,這改變標題的顏色,但它也將改變這可能不是你想要的

  • 把其他元素的標題(如您的Border),並試圖得到它的「拉伸」到控制的寬度(通過設置HorizontalContentAlignment內容區域的顏色屬性爲Stretch)也不起作用,因爲標題所在的元素d在控制模板中被硬編碼爲左對齊。

據我所知,完成你想要的東西的唯一方法是編寫自己的擴展器控制模板並使用它。你應該可以在SO或Google上找到這個例子。

+0

謝謝,我創建了我自己的模板 – keerthee 2015-02-11 06:22:19