当我尝试单击 WPF 中的元素时,Сombobox 关闭
Сombobox closes when I try to click on the elements inside WPF
当我尝试移动滑块时组合框关闭。
我尝试了不同的方法但没有任何帮助,特别是将所有内容放入 ToggleButton
<ComboBox HorizontalAlignment="Right" Background="Transparent" BorderBrush="Transparent" Width="20" Height="20" Style="{DynamicResource ComboBoxForSound}">
<ComboBoxItem Background="Transparent" Style="{DynamicResource ComboBoxItemStyle1}">
<Grid Width="208" Height="108">
<Border CornerRadius="22" BorderThickness="1" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#2d2d2e" Offset="0" />
<GradientStop Color="#151517" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="28,20,0,0" Height="64" Width="150">
<TextBlock Text="Громкость" FontSize="14" Foreground="Orange" FontFamily="{DynamicResource MontserratAlternates}" Margin="5,0,0,0" />
<Slider Margin="0,14,0,0" Name="SoundSlider" TickFrequency="1" IsSelectionRangeEnabled="True" Minimum="0" Maximum="9" SelectionStart="0" Width="150" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource SliderStyle1}" ValueChanged="Slider_ValueChanged_1" />
</StackPanel>
</Grid>
</ComboBoxItem>
</ComboBox>
您的 ComboBox 中是否只有一项?
selected 后 ComboBox 的内置行为是折叠。
选择一个元素是焦点的转移,包括转移到它的任何子元素。
一旦您单击 Slider,它就会获得焦点,该项目将被 select 编辑并且组合框会折叠。
总的来说,看起来像是在胡说八道,完整。
ComboBox 用于 selecting 您甚至没有的项目列表中的项目。
如果您只需要隐藏-显示一组元素,请使用 Expander。
如果您需要不同的东西,请正常详细地解释您想要实现的内容。
答案由问题中的其他详细信息的解释补充:
I'm trying to make a context menu where I can move the slider and so that it doesn't close, the expander doesn't fit because I don't need to move the elements of my window, but open on top of it
在 WPF 中,元素根据其行为逻辑 selected。它们的视觉外观由样式 and/or 模板设置。
ComboBox 行为:当您单击它时,展开列表,当您单击列表中的项目时,select 它并折叠列表。
你需要这种行为吗?
不是。
因此,您不需要 ComboBox。
根据您的描述,您很可能需要 ToggleButton 和 Popup 的组合。
一个简单的例子:
<Window x:Class="SliderInPopup.SliderInPopupWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SliderInPopup"
mc:Ignorable="d"
Title="SliderInPopupWindow" Height="450" Width="800">
<Grid>
<ToggleButton x:Name="toggleButton" VerticalAlignment="Top" HorizontalAlignment="Left" Content="Click Me"/>
<Popup x:Name="popup1" StaysOpen="False"
Placement="Mouse" AllowsTransparency="True"
IsOpen="{Binding IsChecked, ElementName=toggleButton}" >
<Grid Width="208" Height="108">
<Border CornerRadius="22" BorderThickness="1" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#2d2d2e" Offset="0" />
<GradientStop Color="#151517" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="28,20,0,0" Height="64" Width="150">
<TextBlock Text="Громкость" FontSize="14" Foreground="Orange" Margin="5,0,0,0" />
<Slider Margin="0,14,0,0" Name="SoundSlider" TickFrequency="1" IsSelectionRangeEnabled="True" Minimum="0" Maximum="9" SelectionStart="0" Width="150" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
</Grid>
</Popup>
</Grid>
</Window>
当我尝试移动滑块时组合框关闭。 我尝试了不同的方法但没有任何帮助,特别是将所有内容放入 ToggleButton
<ComboBox HorizontalAlignment="Right" Background="Transparent" BorderBrush="Transparent" Width="20" Height="20" Style="{DynamicResource ComboBoxForSound}">
<ComboBoxItem Background="Transparent" Style="{DynamicResource ComboBoxItemStyle1}">
<Grid Width="208" Height="108">
<Border CornerRadius="22" BorderThickness="1" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#2d2d2e" Offset="0" />
<GradientStop Color="#151517" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="28,20,0,0" Height="64" Width="150">
<TextBlock Text="Громкость" FontSize="14" Foreground="Orange" FontFamily="{DynamicResource MontserratAlternates}" Margin="5,0,0,0" />
<Slider Margin="0,14,0,0" Name="SoundSlider" TickFrequency="1" IsSelectionRangeEnabled="True" Minimum="0" Maximum="9" SelectionStart="0" Width="150" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource SliderStyle1}" ValueChanged="Slider_ValueChanged_1" />
</StackPanel>
</Grid>
</ComboBoxItem>
</ComboBox>
您的 ComboBox 中是否只有一项? selected 后 ComboBox 的内置行为是折叠。 选择一个元素是焦点的转移,包括转移到它的任何子元素。 一旦您单击 Slider,它就会获得焦点,该项目将被 select 编辑并且组合框会折叠。
总的来说,看起来像是在胡说八道,完整。 ComboBox 用于 selecting 您甚至没有的项目列表中的项目。 如果您只需要隐藏-显示一组元素,请使用 Expander。
如果您需要不同的东西,请正常详细地解释您想要实现的内容。
答案由问题中的其他详细信息的解释补充:
I'm trying to make a context menu where I can move the slider and so that it doesn't close, the expander doesn't fit because I don't need to move the elements of my window, but open on top of it
在 WPF 中,元素根据其行为逻辑 selected。它们的视觉外观由样式 and/or 模板设置。
ComboBox 行为:当您单击它时,展开列表,当您单击列表中的项目时,select 它并折叠列表。
你需要这种行为吗?
不是。
因此,您不需要 ComboBox。
根据您的描述,您很可能需要 ToggleButton 和 Popup 的组合。
一个简单的例子:
<Window x:Class="SliderInPopup.SliderInPopupWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SliderInPopup"
mc:Ignorable="d"
Title="SliderInPopupWindow" Height="450" Width="800">
<Grid>
<ToggleButton x:Name="toggleButton" VerticalAlignment="Top" HorizontalAlignment="Left" Content="Click Me"/>
<Popup x:Name="popup1" StaysOpen="False"
Placement="Mouse" AllowsTransparency="True"
IsOpen="{Binding IsChecked, ElementName=toggleButton}" >
<Grid Width="208" Height="108">
<Border CornerRadius="22" BorderThickness="1" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#2d2d2e" Offset="0" />
<GradientStop Color="#151517" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="28,20,0,0" Height="64" Width="150">
<TextBlock Text="Громкость" FontSize="14" Foreground="Orange" Margin="5,0,0,0" />
<Slider Margin="0,14,0,0" Name="SoundSlider" TickFrequency="1" IsSelectionRangeEnabled="True" Minimum="0" Maximum="9" SelectionStart="0" Width="150" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
</Grid>
</Popup>
</Grid>
</Window>