Ändern Sie WPF DataGrid-Spalte-Header-Stil-Menü die Sichtbarkeit in der Code-Behind?
Habe ich folgende "Stil" (definiert als eine Ressource, die in xaml). Dies ist im Grunde ein "DataGridColumnHeaderStyle" mit einem Menü, die Zeile filtern. Es ist zugewiesen, um das DataGrid mit: ColumnHeaderStyle="{StaticResource lclDataGridColumnHeaders}"
Gibt es Zeiten im Code-Behind muss ich deaktivieren (Zeile Filterung) Menü (menuColumnOptions), die definiert ist, in diesem Stil. Kann mir jemand sagen, wie man Zugang zu diesem element kann ich also ändern Sie Ihre Sichtbarkeit über C#?
Habe ich versucht: myDataGrid.- Vorlage.FindName("menuColumnOptions"), aber ich erhielt eine Fehlermeldung, irgendetwas muss es "angewendet"...
(Ich nehme an, dass die alternative Lösung ist, um ein Duplikat zu erstellen "Stil", OHNE das Menü, und ändern Sie alle Spalten zu verwenden, der Stil...)
<Style x:Key="lclDataGridColumnHeaders" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Foreground" Value="{StaticResource appTextColor}"/>
<Setter Property="FontWeight" Value="DemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border x:Name="BackgroundBorder"
BorderThickness="0,1,0,1"
Background="{StaticResource lclDataGridHeaderBackground}"
BorderBrush="Transparent"
Grid.ColumnSpan="2" />
<ContentPresenter Margin="6,3,6,3" VerticalAlignment="Center" />
<Path Grid.Column="1" x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z"
Width="8" Height="6" Fill="Gray" Stretch="Fill" Margin="0,0,8,0"
VerticalAlignment="Center" RenderTransformOrigin="0.5,0.4" />
<Menu Grid.Column="3" x:Name="menuColumnOptions" VerticalAlignment="Center" Background="#FFF9F9F7" HorizontalAlignment="Right" >
<MenuItem Padding="0" SubmenuOpened="MenuItemColumnOptions_SubmenuOpened">
<MenuItem.Header>
<Border BorderBrush="{StaticResource appTextColor}" BorderThickness="1" CornerRadius="2" Height="20" Width="20" >
<Path Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Fill="{StaticResource appTextColor}"
Width="10" Height="8" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.4" Margin="2,0"/>
</Border>
</MenuItem.Header>
<MenuItem x:Name="clearFilterMenuItem" Header="Clear Filter..." Click="ClearFilter_Click" IsEnabled="False">
<MenuItem.Icon>
<Image Source="/IngramBook.WpfTableEditor;component/Images/edit_undohs.png" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Equals..." Click="CustomAutoFilter_Click" />
<MenuItem Header="Does Not Equal..." Click="CustomAutoFilter_Click"/>
<Separator />
<MenuItem Header="Begins With..." Click="CustomAutoFilter_Click"/>
<MenuItem Header="Ends With..." Click="CustomAutoFilter_Click"/>
<Separator />
<MenuItem Header="Contains..." Click="CustomAutoFilter_Click" />
<MenuItem Header="Does Not Contain..." Click="CustomAutoFilter_Click"/>
<Separator />
<MenuItem Header="Custom Filter..." Click="CustomAutoFilter_Click">
<MenuItem.Icon>
<Image Source="/IngramBook.WpfTableEditor;component/Images/Filter2HS.png" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Select Individual Values..." Click="SelectIndividualItems_Click">
<MenuItem.Icon>
<Image Source="/IngramBook.WpfTableEditor;component/Images/checkboxhs.png" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header="Trim Trailing White Spaces..." Click="TrimTrailingWhiteSpaces_Click"/>
<MenuItem Header="Capitalization" >
<MenuItem.Icon>
<Image Source="/IngramBook.WpfTableEditor;component/Images/FontHS.png" Width="16" Height="16"/>
</MenuItem.Icon>
<MenuItem Header="Capitalize Each Word" Click="CapitalizeEachWord_Click"/>
<MenuItem Header="UPPERCASE" Click="Uppercase_Click"/>
<MenuItem Header="lowercase" Click="Lowercase_Click"/>
</MenuItem>
<Separator />
<MenuItem Header="Hide Column" Click="HideColumn_Click"/>
<Separator />
<MenuItem x:Name="deleteColumnMenuItem" Header="Delete Column" Click="dropColumnButton_Click">
<MenuItem.Icon>
<Image Source="/IngramBook.WpfTableEditor;component/Images/DeleteHS.png" Width="16" Height="16"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
<Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
<Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="SortDirection" Value="Ascending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
<Setter TargetName="SortArrow" Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="180" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="SortDirection" Value="Descending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="SortDirection" Value="{x:Null}">
<Setter TargetName="SortArrow" Property="Visibility" Value="Collapsed" />
</Trigger>
<Trigger Property="DisplayIndex" Value="0">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_LeftHeaderGripper" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True" >
<Setter Property="Background" TargetName="BackgroundBorder" Value="{StaticResource appButtonBackgroundHighlight}" />
<Setter Property="BorderBrush" TargetName="BackgroundBorder" Value="Transparent" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wären Sie in der Lage, erstellen Sie eine angefügte Eigenschaft (von tybe boolean oder Sichtbarkeit) für die DataGridColumnHeader Klasse, und binden die Aktiviert oder die Visibility-Eigenschaft des Menüs zu, die angefügte Eigenschaft?
http://www.deepcode.co.uk/2008/08/exposing-new-properties-for-control_15.html
Edit:
Mein Gedanke ist, dass eine angefügte Eigenschaft wird es einfacher, da konnte man nur die Sichtbarkeit in XAML, aber ich habe versucht, ein quick-test, und ich denke, die Methode, die Sie verwenden möchten, sollten genauso gut funktionieren.
Wenn Sie die Fehlermeldung erhalten, könnte man den code, wenn Sie versuchen, um die Sichtbarkeit im code hinter? Es klingt wie Sie versuchen könnten, Zugriff auf die DataGridColumnHeader Vorlage, bevor es vollständig gebaut (in dem Fall das verschieben Sie Ihren code, um das Loaded-Ereignis könnte Ihr problem lösen).
Edit 2:
Code Hinter:
Hier ist, was ich am Ende tun.
Ich kopierte den Stil und die entfernt das Menü von diesem Kopieren.
Dann im code, den ich nur setzen Sie es mit:
myDataGrid.ColumnHeaderStyle = (Stil)FindResource("lclDataGridLockedColumnHeaders");