Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Изменение Style ScrollBar-а в DataGrid-е


Автор: Человек01 15.3.2009, 18:26
Диспозиция:
Я делаю определение Style для всех ScrollBar в файле scrollBar.xaml
Код

<ResourceDictionary .... >
    ......
  <Style x:Key="scrollbar001" TargetType="{x:Type ScrollBar}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Style.Triggers>
      <Trigger Property="Orientation" Value="Horizontal">
        <Setter Property="Width" Value="Auto"/>
        <Setter Property="Height" Value="18" />
        <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
      </Trigger>
      <Trigger Property="Orientation" Value="Vertical">
        <Setter Property="Width" Value="18"/>
        <Setter Property="Height" Value="Auto" />
        <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
      </Trigger>
    </Style.Triggers>
  </Style>
</ResourceDictionary>

Для того чтобы это определение сработало требуется в дизайне UserControl.xaml добавить всего лишь:
Код

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="scrollBar.xaml" />
  </ResourceDictionary.MergedDictionaries>

И все ScrollBarы получат соответствующий Style

Вопрос: Но вот как этот стиль применить из кода? И только к ScrollBarам?
Например у меня есть public class ExDataGrid : DataGrid, как изменить стили его ScrollBarов, оставив все остальные настройки без изменений?
Код

public class ExDataGrid : DataGrid
{
        public ExDataGrid()
              : base()
        { 
            this.Loaded += new RoutedEventHandler(ElDataGrid_Loaded);
        }

        void ElDataGrid_Loaded(object sender, RoutedEventArgs e)
        {
           /*Что тут надо сделать?*/
        }
}



Автор: Человек01 15.3.2009, 21:07
Так и не нашел как это можно сделать  smile , в результате сделал так:
Создал новый контрол поместил туда DataGrid туда же поместил привязку scrollBar.xaml которая автоматом выставила Style для ScrollBarов DataGridа
Код

<UserControl x:Class="DGTV.ElDataGrid"
              x:Name="supername"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WpfToolkit"
    >
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="scrollBar.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <wpf:DataGrid Name="datagrid1" DataContext="{Binding Path=DataContext, ElementName=supername}" ItemsSource="{Binding}"></wpf:DataGrid>
    </Grid>
</UserControl>


Код

namespace DGTV
{
    /// <summary>
    /// Interaction logic for ElDataGrid.xaml
    /// </summary>
    public partial class ElDataGrid : UserControl
    {
        public ElDataGrid()
        {
            InitializeComponent();
        }
        public Microsoft.Windows.Controls.DataGrid DataGrid
        {
            get { return datagrid1; }
            set { datagrid1 = value; }
        }

    }
}

Топорно, но работает  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)