2011-09-08 68 views
0

我有一个自定义数据样式网格,我已在单独的资源文件中定义。在这种风格中,我重写ControlTemplate来改变它的外观。绑定到自定义ControlTemplate中的属性

然后我有我自己的CustomDataGrid控件,该控件从UserControl派生并使用资源文件中的样式。

我需要能够让垂直滚动条具有用户定义的宽度。我知道如何通过硬编码值来更改滚动条宽度。我不能这样做的是,在我的自定义控件中,我可以设置滚动条的宽度。

这是我的模板样式在资源文件中的样子,我需要滚动条宽度我有一系列问号。

<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGrid}"> 
       <Border x:Name="border" SnapsToDevicePixels="True" BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Background="{TemplateBinding RowBackground}"> 
        <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false" Background="Black"> 
         <ScrollViewer.Template> 
          <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto" /> 
             <ColumnDefinition Width="*" /> 
             <ColumnDefinition Width="Auto" /> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto" /> 
             <RowDefinition Height="*" /> 
             <RowDefinition Height="Auto" /> 
            </Grid.RowDefinitions> 
            <Button Focusable="false" Command="{x:Static DataGrid.SelectAllCommand}" 
             Style="{DynamicResource {ComponentResourceKey 
             ResourceId=DataGridSelectAllButtonStyle, 
             TypeInTargetAssembly={x:Type DataGrid}}}" 
             Visibility="{Binding HeadersVisibility, 
             ConverterParameter={x:Static DataGridHeadersVisibility.All}, 
             Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
             RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
             Width="{Binding CellsPanelHorizontalOffset, 
             RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 
            <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Height="32" 
             Visibility="{Binding HeadersVisibility, 
             ConverterParameter={x:Static DataGridHeadersVisibility.Column}, 
             Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
             RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 
            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Grid.ColumnSpan="2" 
             Grid.Row="1" CanContentScroll="{TemplateBinding CanContentScroll}" /> 
            <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" 
             Orientation="Vertical" ViewportSize="{TemplateBinding ViewportHeight}" 
             Maximum="{TemplateBinding ScrollableHeight}" 
             Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
             Width="{????????????????????????}"  
             Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/> 
            <Grid Grid.Column="1" Grid.Row="2"> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, 
               RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 
              <ColumnDefinition Width="*" /> 
             </Grid.ColumnDefinitions> 
             <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Orientation="Horizontal" 
              ViewportSize="{TemplateBinding ViewportWidth}" Maximum="{TemplateBinding ScrollableWidth}" 
              Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
              Value="{Binding HorizontalOffset, Mode=OneWay, 
              RelativeSource={RelativeSource TemplatedParent}}"/> 
             </Grid> 
            </Grid> 
          </ControlTemplate> 
         </ScrollViewer.Template> 
         <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </ScrollViewer> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

任何人都可以帮我吗?

回答

0

创建名为(eg)ScrollBarWidth的依赖项属性,然后在模板中写入Width={TemplateBinding ScrollBarWidth}

+0

我已经试过了,编译时得到以下错误信息:无法找到'ScrollViewer'类型的静态成员'ScrollBarWidthProperty'。 – WPFNewbie

+0

我没有注意到你在嵌套模板中。我想你需要TemplateBind ScrollViewer的附加属性到你的属性,然后TemplateBind将宽度附加到属性。 – SLaks

+0

我不知道这是否正确,但我使用宽度=“{绑定元素名= CDataGrid,路径= ScrollBarWidth}”,其中CDataGrid是从我的自定义数据网格的UserControl派生的名称。我在后台代码中为我的自定义数据网格控件创建了一个ScrollBarWidthProperty作为DependencyProperty。这似乎工作。我不知道它有多正确,或者是否有潜在的问题。 – WPFNewbie

相关问题