#c# #wpf #xaml #treeview
#c# #wpf #xaml #просмотр дерева
Вопрос:
Когда я нажимаю на элемент TreeViewItem, вызывается itemClicked() .
C#:
public void ItemClicked(object sender, RoutedEventArgs e)
{
if (sender is TreeViewItem ClickedNode)
{
if (ClickedNode.HasItems) // Its a parent node
{
if (CtrlPressed)
{
var SelectedChild = TreeView.SelectedItem as TreeViewItem; // Have to do this manually since the sender is parent???
SelectedChild.Background = Brushes.Black;
SelectedChild.Foreground = Brushes.White;
}
}
}
В моем XAML я отключил выбранные цвета по умолчанию:
<Grid>
<TreeView Name="TreeView">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseLeftButtonUp"
Handler="ItemClicked"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}"
Color="Black" />
</TreeView.Resources>
</TreeView>
</Grid>
Итак, теперь, когда я нажимаю на узел, он будет отображаться не черным, а полностью белым. Таким образом, прозрачный, похоже, переопределяет только что установленные кисти.Черный. Кажется, что цвет переднего плана проходит.
Первый вопрос: отправителем является не фактический выбранный узел, а его родительский узел. Почему это так? Я должен выяснить, является ли это родительским узлом вручную, а затем получить.SelectedItem тоже вручную. Как мне это исправить?
Второй вопрос: как мне исправить переопределение цветов? Я вообще ничего не хочу, когда IsSelected имеет значение true…
Комментарии:
1. Является ли дочерний элемент TreeViewItem или TreeViewNode? Ваш код таков: отправителем является TreeViewItem ClickedNode
2. Все в mit TreeView является TreeViewItem. Я даже не знал, что существуют разные объекты..
3. Вы должны задавать только один вопрос за раз. Какой пост вы выберете, если кто-то может ответить на один вопрос, но не на другой?
4. Первый вопрос: дочерние элементы treeviewitems находятся внутри их родительского элемента. Элемент treeviewitem — это элемент управления заголовками itemscontrol. Взгляните на e.OriginalSource .