Спасибо, что прочитали мой вопрос!
У меня возникла проблема с настройкой DataGrid RowGroupHeader, ситуация такова:
Мне нужен способ управления DataGrid RowGroupHeader, поскольку я хочу отображать в нем некоторые значения данных. Значения будут генерироваться во время выполнения, чтобы RowGroupHeaderStyle нужно было сгенерировать и добавить в свойство RowGroupHeaderStyles DataGrid во время выполнения (возможно, используя XamlReader.Load).
Кроме того, положение значения базы данных в RowGroupHeader должно быть выровнено с соответствующим столбцом из DataGrid.
Мне удалось создать рабочий шаблон, используя этот пост MS Forum, но мне не повезло с позиционированием элемента привязки данных, в моем случае TextBlock, чтобы правильно выровнять его с данным столбцом DataGrid.
Любые предложения?
Большое спасибоКак создать шаблон для Silverlight 3 custom DataGrid RowHeaderGroup?
ответ
Это не было легким, но после некоторого обширного и прибегая к помощи пирсингом на опыт других людей, я пришел с этим, что отлично работает для меня
string loadString = @"<Style xmlns=""http://schemas.microsoft.com/client/2007"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
xmlns:localprimitives=""clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data""
xmlns:vsm=""clr-namespace:System.Windows;assembly=System.Windows""
xmlns:data=""clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"" TargetType=""data:DataGridRowGroupHeader"">
<Setter Property=""Cursor"" Value=""Arrow"" />
<Setter Property=""IsTabStop"" Value=""False"" />
<Setter Property=""Background"" Value=""#FFE4E8EA"" />
<Setter Property=""Height"" Value=""20""/>
<Setter Property=""Template"">
<Setter.Value>
<ControlTemplate TargetType=""data:DataGridRowGroupHeader"">
<localprimitives:DataGridFrozenGrid Name=""Root"" Background=""{TemplateBinding Background}"">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name=""CurrentStates"">
<vsm:VisualState x:Name=""Regular""/>
<vsm:VisualState x:Name=""Current"">
<Storyboard>
<DoubleAnimation Storyboard.TargetName=""FocusVisual"" Storyboard.TargetProperty=""Opacity"" To=""1"" Duration=""0"" />
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<localprimitives:DataGridFrozenGrid.Resources>
</localprimitives:DataGridFrozenGrid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=""Auto"" />
<ColumnDefinition Width=""Auto"" />
<ColumnDefinition Width=""Auto"" />
<ColumnDefinition Width=""Auto"" />
<ColumnDefinition Width=""Auto"" />
<ColumnDefinition Width=""Auto"" />"
В этой точке I есть некоторые динамические столбцы в сетке, поэтому я добавляю их так же, как и Grid.ColumnDefinitions, но если ваш datagrid статичен, вы помещаете нужное количество столбцов.
+ colStr1 +
@"</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=""Auto""/>
<RowDefinition/>
<RowDefinition Height=""Auto""/>
</Grid.RowDefinitions>
<StackPanel x:Name=""CustomRGHStackPanel"" Orientation=""Horizontal"" Tag=" + _tagNo + @" Grid.Column=""3"" Grid.Row=""1"" VerticalAlignment=""Center"" Margin=""0,1,0,1"">
<StackPanel.Resources>
<Style TargetType=""data:DataGridCell"">
<Setter Property=""Background"" Value=""Transparent"" />
<Setter Property=""HorizontalContentAlignment"" Value=""Stretch"" />
<Setter Property=""VerticalContentAlignment"" Value=""Stretch"" />
<Setter Property=""IsTabStop"" Value=""False"" />
<Setter Property=""FontWeight"" Value=""Black""/>
<Setter Property=""Template"">
<Setter.Value>
<ControlTemplate TargetType=""data:DataGridCell"">
<Grid Margin=""1,-1,-1,0"" >
<Grid Name=""Root"" Background=""{TemplateBinding Background}"" Margin=""5,0,0,0"">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name=""CurrentStates"">
<vsm:VisualState x:Name=""Regular"" />
<vsm:VisualState x:Name=""Current"">
<Storyboard>
<DoubleAnimation Storyboard.TargetName=""FocusVisual"" Storyboard.TargetProperty=""Opacity"" To=""1"" Duration=""0"" />
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name=""ValidationStates"">
<vsm:VisualState x:Name=""Valid""/>
<vsm:VisualState x:Name=""Invalid"">
<Storyboard>
<DoubleAnimation Storyboard.TargetName=""InvalidVisualElement"" Storyboard.TargetProperty=""Opacity"" Duration=""0"" To=""1""/>
<ColorAnimation Storyboard.TargetName=""FocusVisual"" Storyboard.TargetProperty=""(Fill).Color"" Duration=""0"" To=""#FFFFFFFF""/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width=""Auto"" />
</Grid.ColumnDefinitions>
<Rectangle Name=""FocusVisual"" Stroke=""#FF6DBDD1"" StrokeThickness=""1"" Fill=""#66FFFFFF"" HorizontalAlignment=""Stretch""
VerticalAlignment=""Stretch"" IsHitTestVisible=""false"" Opacity=""0"" />
<ContentPresenter
Content=""{TemplateBinding Content}""
ContentTemplate=""{TemplateBinding ContentTemplate}""
HorizontalAlignment=""{TemplateBinding HorizontalContentAlignment}""
VerticalAlignment=""{TemplateBinding VerticalContentAlignment}""
Margin=""{TemplateBinding Padding}"" />
<Rectangle x:Name=""InvalidVisualElement"" IsHitTestVisible=""False"" StrokeThickness=""1"" Stroke=""#FFDC000C"" HorizontalAlignment=""Stretch"" VerticalAlignment=""Stretch"" Opacity=""0""/>
<Rectangle Name=""q1q"" Fill=""#c9caca"" Grid.Column=""1"" Margin=""1,0,1,0"" HorizontalAlignment=""Right"" VerticalAlignment=""Stretch"" Width=""0"" />
</Grid>
<Rectangle Name=""qq"" Fill=""#c9caca"" Margin=""1,0,1,0"" HorizontalAlignment=""Left"" VerticalAlignment=""Stretch"" Width=""1"" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<data:DataGridCell Content=""{Binding Name}""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell HorizontalContentAlignment=""Left"" Margin=""7,0,0,0"" Content=""{Binding Converter={StaticResource myConverter}, ConverterParameter=TotalScore}""/>" + colStr2 +
@"</StackPanel>
<Rectangle Grid.Column=""1"" Grid.ColumnSpan=""5"" Fill=""#FFFFFFFF"" Height=""1""/>
<Rectangle Grid.Column=""1"" Grid.Row=""1"" Name=""IndentSpacer"" />
<ToggleButton Grid.Column=""2"" Grid.Row=""1"" Name=""ExpanderButton"" Height=""15"" Width=""15"" Margin=""2,0,0,0"">
<ToggleButton.Template>
<ControlTemplate TargetType=""ToggleButton"">
<Grid Background=""Transparent"">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name=""CommonStates"">
<vsm:VisualState x:Name=""Normal""/>
<vsm:VisualState x:Name=""MouseOver"">
<Storyboard>
<ColorAnimation Storyboard.TargetName=""CollapsedArrow"" Storyboard.TargetProperty=""(Stroke).Color"" Duration=""0"" To=""#FF6DBDD1""/>
<ColorAnimation Storyboard.TargetName=""ExpandedArrow"" Storyboard.TargetProperty=""(Fill).Color"" Duration=""0"" To=""#FF6DBDD1""/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name=""Pressed"">
<Storyboard>
<ColorAnimation Storyboard.TargetName=""CollapsedArrow"" Storyboard.TargetProperty=""(Stroke).Color"" Duration=""0"" To=""#FF6DBDD1""/>
<ColorAnimation Storyboard.TargetName=""ExpandedArrow"" Storyboard.TargetProperty=""(Fill).Color"" Duration=""0"" To=""#FF6DBDD1""/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name=""Disabled"">
<Storyboard>
<DoubleAnimation Duration=""0"" Storyboard.TargetName=""CollapsedArrow"" Storyboard.TargetProperty=""Opacity"" To="".5""/>
<DoubleAnimation Duration=""0"" Storyboard.TargetName=""ExpandedArrow"" Storyboard.TargetProperty=""Opacity"" To="".5""/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name=""CheckStates"">
<vsm:VisualState x:Name=""Checked"" />
<vsm:VisualState x:Name=""Unchecked"">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration=""0"" Storyboard.TargetName=""CollapsedArrow"" Storyboard.TargetProperty=""Visibility"">
<DiscreteObjectKeyFrame KeyTime=""0"" Value=""Visible""/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Duration=""0"" Storyboard.TargetName=""ExpandedArrow"" Storyboard.TargetProperty=""Visibility"">
<DiscreteObjectKeyFrame KeyTime=""0"" Value=""Collapsed""/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Path Stretch=""Uniform"" Data=""F1 M 0,0 L 0,1 L .6,.5 L 0,0 Z"" Width=""5"" HorizontalAlignment=""Center"" VerticalAlignment=""Center"" x:Name=""CollapsedArrow"" Visibility=""Collapsed"" Stroke=""#FF414345""/>
<Path Stretch=""Uniform"" Data=""F1 M 0,1 L 1,1 L 1,0 L 0,1 Z"" Width=""6"" HorizontalAlignment=""Center"" VerticalAlignment=""Center"" x:Name=""ExpandedArrow"" Fill=""#FF414345""/>
</Grid>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<Rectangle Grid.Column=""1"" Grid.ColumnSpan=""5"" Fill=""#FFD3D3D3"" Height=""1"" Grid.Row=""2""/>
<Rectangle Name=""FocusVisual"" Grid.Column=""1"" Grid.ColumnSpan=""4"" Grid.RowSpan=""3"" Stroke=""#FF6DBDD1"" StrokeThickness=""1"" HorizontalAlignment=""Stretch""
VerticalAlignment=""Stretch"" IsHitTestVisible=""false"" Opacity=""0"" />
<localprimitives:DataGridRowHeader Name=""RowHeader"" Grid.RowSpan=""3"" localprimitives:DataGridFrozenGrid.IsFrozen=""True""/>
</localprimitives:DataGridFrozenGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>";
Это где ваше содержание клеток приходит, и снова у меня есть некоторые динамические столбцы, поэтому мне нужно, чтобы добавить клетки динамически (нет необходимости делать это, если сетка является статическим)
<data:DataGridCell Content=""{Binding Name}""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell Content=""""/>
<data:DataGridCell HorizontalContentAlignment=""Left"" Margin=""7,0,0,0"" Content=""{Binding Converter={StaticResource myConverter}, ConverterParameter=TotalScore}""/>" + colStr2 +
Это это в значительной степени, да, я согласен, что это не тривиальная работа, но она дает вам индивидуальный стиль, когда вам это нужно! Не стесняйтесь комментировать!
Забыл добавить это: вы загружаете стиль с помощью XamlReader.Load во время выполнения (в моем случае) или используете его как ResourceDictionary или аналогичный в XAML – KlsLondon
- 1. Microsoft Silverlight DataGrid custom ToolTip
- 2. слабый шаблон события Silverlight 3
- 3. Silverlight 3 Datagrid: контейнер строк шаблонов
- 4. Silverlight 3 BETA DataGrid group
- 5. Silverlight 3 ProgressBar Шаблон
- 6. silverlight 3 Настройка заголовка Datagrid
- 7. Silverlight 3 - привязка к DataGrid
- 8. Silverlight 3 DataGrid - Rounded Corners
- 9. Silverlight 3 datagrid: Как добавить поддержку прокрутки?
- 10. Как манипулировать DataGrid в Silverlight 3
- 11. Как найти поле в Silverlight 3 DataGrid?
- 12. Silverlight 3 - Как обновить содержимое DataGrid?
- 13. Как реализовать пейджинг в Silverlight 3 datagrid?
- 14. Silverlight 3 - Как перебрать в DataGrid
- 15. Шаблон детского окна SilverLight 3
- 16. ColSpan для Silverlight Datagrid
- 17. Как я могу указать шаблон для столбца datagrid silverlight?
- 18. Как создать Silverlight 3 темы?
- 19. Как создать простой редактируемый dataGrid в Silverlight
- 20. SilverLight Datagrid
- 21. Как центрировать выравнивание содержимого шаблона заголовка для datagrid Silverlight 3?
- 22. Silverlight создать шаблон управления для TabControl
- 23. Silverlight 3 Datagrid - временно выделите строку
- 24. Пользовательский шаблон столбца для DataGrid
- 25. Связывание DomainDataSource с DataGrid в Silverlight 3
- 26. silverlight 3 столбца перетаскивания datagrid вертикально
- 27. silverlight 3 datagrid x: name issue
- 28. Как создать шаблон DataGrid с кодом?
- 29. изменить шаблон строки в silverlight datagrid для определенной строки
- 30. шаблон silverlight для ListBox и DataGrid при пустом?
Можете ли вы рассказать о том, как это содержимое в заголовке __Row__ необходимо согласовать с определенным __Column__? Вы имеете в виду вертикально? Это очень высокий порядок. Также есть ли причина, по которой стандартная привязка для содержимого в заголовке строки не будет работать? Или вы говорите, что потенциальный набор привязок для отображения может варьироваться в зависимости от строки? – AnthonyWJones