gpt4 book ai didi

WPF滚动和焦点改变问题

转载 作者:行者123 更新时间:2023-12-01 11:07:30 26 4
gpt4 key购买 nike

我的 WPF 应用程序滚动时遇到问题。

这是交易。我的用户界面如下:

ScrollViewer

我的应用程序的作用是充当许多应用程序的中心枢纽并启动它们。管理员可以启动另一个用户记录的转储。因此,我有一个 ListView,显示应用程序列表,如果需要可以滚动。我定义了 GroupStyle 以显示扩展器并模拟 Windows 资源管理器 View 。一切正常,我只是有一个问题:当用鼠标滚轮滚动时,透明蓝色的组件(“启动模式”)似乎捕获了焦点并停止滚动。这尤其意味着,如果我的鼠标位于此控件之外的任何位置,则滚动是可以的。但是每当鼠标进入这个控件时,我就不能再滚动了。我尝试修改属性 Focusable 并将其设置为 False 我可以在任何地方设置,但没有任何改变。我猜这最终不是焦点问题。有人知道如何避免滚动被元素捕获吗?

下面是扩展器内容的一些(经过简化,删除了一些无用的属性,以使其尽可能清晰)XAML:

<StackPanel Orientation="Vertical"  VerticalAlignment="Top" >

<ToggleButton>
<!-- ToggleButton Content... -->
</ToggleButton>

<!-- This is the custom component in which you can see "Launch mode" -->
<my:UcReleaseChooser >
<!-- Properties there. I tried to set Focusable to False, no impact... -->
</my:UcReleaseChooser>

</StackPanel>

UcReleaseChooser 的代码:

<StackPanel HorizontalAlignment="Stretch"
Focusable="False" ScrollViewer.CanContentScroll="False">

<ListBox ItemsSource="{Binding ListChosenReleases}" BorderBrush="LightGray" Background="AliceBlue"
HorizontalAlignment="Stretch" Focusable="False" ScrollViewer.CanContentScroll="False">

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"
Focusable="False" ScrollViewer.CanContentScroll="False"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True" HorizontalAlignment="Stretch"
Focusable="False" ScrollViewer.CanContentScroll="False">
<TextBlock DockPanel.Dock="Top"
HorizontalAlignment="Left" Text="{Binding Key}"
FontStyle="Italic"/>
<ListBox DockPanel.Dock="Bottom"
HorizontalAlignment="Right" ItemsSource="{Binding Value}"
BorderBrush="{x:Null}" Background="AliceBlue"
Focusable="False" ScrollViewer.CanContentScroll="False">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Focusable="False"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<-- Blah blah about style -->
</Style>
</ListBox.ItemContainerStyle>


<ListBox.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding Key}" Margin="3"
IsChecked="{Binding Path=IsSelected, Mode=TwoWay,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListBoxItem}}}"
Focusable="False" ScrollViewer.CanContentScroll="False"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>

</ListBox>

</StackPanel>

如您所见,UcReleaseChooser 包含一个 RadioButton 列表。我尝试将 FocusableCanContentScroll 设置为 False 似乎合适的任何地方,但控件一直阻止主 UI 滚动...

我想我应该更改另一个属性...有什么想法吗?

谢谢!

最佳答案

问题出在 ListBox 上,或者更具体地说,出在 ListBox 模板中的 ScrollViewer 上。这是获取滚动事件并在 ListView 中的外部 ScrollViewer 甚至看到它们之前使用它们。

如果可能,我建议用 ItemsControl 替换 ListBox。但是,这意味着将没有 SelectedItem 属性。如果您需要,我建议将 ScrollViewer.Horizo​​ntalScrollBarVisibility(或 VerticalScrollBarVisibility)设置为 Disabled。如果做不到这一点,我只能建议重新模板化 ListBox 以完全不包含 ScrollViewer

关于WPF滚动和焦点改变问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com