我有一个ListBox控件,在那里我有一些自定义下拉菜单的自定义项(我几天前的问题-How to show a ListBox item outside the ListBox control and over all other controls on Item click)。
现在,我有一个新的问题,我附上一个视频剪辑。所以,我想我的底部项目的行为,作为一个以上的点击项目。因此,当我点击底部的项目时,我希望上面的项目向上移动,以便显示最后一个项目的下拉菜单。你可以看到,当我点击上面的项目,他们改变了大小,并移动底部的项目,以显示下拉菜单。同样的原则也适用于其他自定义列表框,但这里没有,因为这些自定义项(仅在这里)。请看我发的视频。您可以找到定义项目的数据模板代码。
<DataTemplate x:Key="MYListBoxItemDataTemplate" DataType="{x:Type models:MyType}">
<StackPanel x:Name="itemsactions" HorizontalAlignment="Center" Height="135">
<ToggleButton x:Name="choose" Height="52" Margin="0,27,0,0"
IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
Command="{Binding DataContext.CurrentViewModel.ClickPalletTypeCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
Style="{DynamicResource CircledTransparentToggleButtonStyle}">
<Image x:Name="image" VerticalAlignment="Center" Margin="0,0,0,0" Height="52" Stretch="Uniform">
<Image.Source>
<BitmapImage UriSource="{Binding ImageSource.Regular}"/>
</Image.Source>
</Image>
</ToggleButton>
<StackPanel HorizontalAlignment="Center">
<Label Margin="0,15,0,0" Width="152" HorizontalAlignment="Center" HorizontalContentAlignment="Center"
FontSize="14" FontWeight="SemiBold"
Content="{Binding Weight}"
Style="{DynamicResource LeftLoginTextBoxBlockLabelStyle}"/>
<Label Margin="0,2,0,0" Width="152" HorizontalAlignment="Center" HorizontalContentAlignment="Center"
FontSize="14"
Content="{Binding Size}"
Style="{DynamicResource LeftLoginTextBoxBlockLabelStyle}"/>
</StackPanel>
<StackPanel Margin="0,34,0,0" x:Name="subactions" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed">
<ToggleButton x:Name="delete" IsTabStop="False" Width="70"
IsChecked="{Binding DataContext.CurrentViewModel.IsDeleteConfirmed, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
Style="{StaticResource DeleteConfirmToggleButtonStyle}"
Command="{Binding DataContext.CurrentViewModel.ConfirmDeletePalletTypeCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter=""/>
<Button x:Name="edit" IsTabStop="False" HorizontalAlignment="Left" Height="40" Style="{DynamicResource EditButtonStyle}" Content="Edit"
Command="{Binding Path=DataContext.CurrentViewModel.EditPalletTypeCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
</StackPanel>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked, ElementName=choose}" Value="True">
<Setter Property="Visibility" TargetName="subactions" Value="Visible"/>
<Setter Property="Height" TargetName="itemsactions" Value="200"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsMouseOver, ElementName=choose}" Value="True">
<Setter Property="Source" TargetName="image" Value="{Binding ImageSource.MouseOver}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsPressed, ElementName=choose}" Value="True">
<Setter Property="Source" TargetName="image" Value="{Binding ImageSource.Pressed}"/>
<Setter Property="Visibility" TargetName="subactions" Value="Visible"/>
<Setter Property="Height" TargetName="itemsactions" Value="200"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=choose}" Value="True">
<Setter Property="Source" TargetName="image" Value="{Binding ImageSource.Choosen}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnabled, ElementName=choose}" Value="False">
<Setter Property="Source" TargetName="image" Value="{Binding ImageSource.Disabled}"/>
<Setter Property="Height" TargetName="itemsactions" Value="135"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
更新-工作控制列表框:
2条答案
按热度按时间a11xaf1n1#
工作控件在展开面板中具有三个元件,与非工作容器中的两个元件相对。这使得
ListBoxItem
具有更大的高度。看起来这足以触发ListBox
将项目滚动到视图中。你可以尝试两件事:
1.向展开的容器添加第三个元素(或通常增加展开的项目高度)
1.处理
ListBox.SelectionChanged
或ToggleButton.Clicked
事件,在处理程序中获取选中的项容器并调用FrameworkElement.BringIntoView()
。这足以将完整的项目自动滚动到视图中。t2a7ltrp2#
下拉列表存在于切换按钮的父对象“内部”。您正在使用的网格布局可能会调整大小以适应,然后瞧!所有内容都被“正确地”重绘以适应“在父级内部”的新内容。
我没有写太多的xaml(我只是使用事件和编写c#代码...),但我想你需要以某种方式停止调整网格的大小,或者将堆栈面板标记为不可见,而不是按钮父级的子级。
我也不知道该怎么做。