2011-09-08 3 views
0

별도의 리소스 파일에 정의한 사용자 지정 데이터 스타일 표가 있습니다. 이 스타일에서는 ControlTemplate을 재정 의하여 외양을 변경합니다.사용자 지정 ControlTemplate의 속성에 바인딩

그런 다음 UserControl에서 파생 된 내 자신의 CustomDataGrid 컨트롤이 있고 리소스 파일의 스타일을 사용합니다.

세로 스크롤 막대에 사용자 정의 너비가 있어야합니다. 값을 하드 코딩하여 스크롤 막대 너비를 변경하는 방법을 알고 있습니다. 내가 할 수없는 일은 내 사용자 지정 컨트롤에서 스크롤 막대 너비를 설정할 수 있도록하는 것입니다.

다음은 리소스 파일에서 내 템플릿 스타일이 어떻게 생겼는지, 여기서 스크롤 막대 폭이 필요한데, 일련의 물음표가 있습니다.

<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

(예 : ScrollBarWidth)이라는 종속성 속성을 만든 다음 Width={TemplateBinding ScrollBarWidth}을 템플릿에 작성합니다.

+0

컴파일 할 때 다음 오류 메시지가 나타납니다. 'ScrollViewer'형식의 정적 멤버 'ScrollBarWidthProperty'를 찾을 수 없습니다. – WPFNewbie

+0

나는 네가 중첩 된 템플릿에 있다는 것을 눈치 채지 못했다. 귀하의 속성에 ScrollViewer의 연결된 속성을 TemplateBind, 그 다음 TemplateBind 너비가 연결된 속성에 필요하다고 생각합니다. – SLaks

+0

이 올바른지 여부를 모르겠지만 Width = "{Binding ElementName = CDataGrid, Path = ScrollBarWidth}"CDataGrid UserControl에서 파생 된 내 사용자 지정 데이터 표에 주어진 이름입니다. 내 사용자 정의 데이터 격자 컨트롤에 대한 코드에서 DependencyProperty로 ScrollBarWidthProperty를 만들었습니다. 이것은 작동하는 것처럼 보입니다. 그것이 얼마나 정확한지 또는 잠재적 인 문제가 있는지는 알 수 없습니다. – WPFNewbie

관련 문제