gpt4 book ai didi

c# - 扩展工具包 SplitButton : use ComboBox ItemsSource as DropDownContent

转载 作者:太空狗 更新时间:2023-10-30 01:32:25 27 4
gpt4 key购买 nike

我想重构我的代码以便使用 Extended Toolkit SplitButton而不是标准 Combobox

这是我最初的工作代码:

<ComboBox ItemsSource="{Binding Path=VisualizationList, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock
Text="{Binding Converter={StaticResource MultiLangConverter}/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

这是我的SplitButton

<xctk:SplitButton Content="Click Me">
<xctk:SplitButton.DropDownContent>
<!-- What should I use here? -->
</xctk:SplitButton.DropDownContent>
</xctk:SplitButton>

现在,我想将 ItemsSource 之类的东西设置为 SplitButton,以使其表现得像标准的 ComboBox 按钮。有没有办法获得这种行为?

如果你需要的话,这是我的SplitButtonControlTemplate的样式。

<ControlTemplate x:Key="SplitButtonTemplate" TargetType="xctk:SplitButton">
<Grid x:Name="MainGrid" SnapsToDevicePixels="True">
<xctk:ButtonChrome x:Name="ControlChrome" Background="{TemplateBinding Background}"
RenderEnabled="{TemplateBinding IsEnabled}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button x:Name="PART_ActionButton"
Margin="0"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Padding="{TemplateBinding Padding}"
Tag="{TemplateBinding Tag}"
Style="{StaticResource BlackButton}">
<ContentPresenter Name="ActionButtonContent" Margin="{TemplateBinding Padding}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
RecognizesAccessKey="true" />
</Button>
<ToggleButton x:Name="PART_ToggleButton"
Grid.Column="1"
IsTabStop="False"
IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<ContentPresenter />
</ControlTemplate>
</ToggleButton.Template>
<Grid>
<xctk:ButtonChrome x:Name="ToggleButtonChrome"
RenderNormal="False"
RenderChecked="{TemplateBinding IsOpen}"
RenderEnabled="{TemplateBinding IsEnabled}"
RenderMouseOver="{Binding IsMouseOver, ElementName=PART_ToggleButton}"
RenderPressed="{Binding IsPressed, ElementName=PART_ToggleButton}">
<Grid x:Name="arrowGlyph" IsHitTestVisible="False" Margin="15,6,15,6">
<Path Width="7" Height="4"
Data="M 0,1 C0,1 0,0 0,0 0,0 3,0 3,0 3,0 3,1 3,1 3,1 4,1 4,1 4,1 4,0 4,0 4,0 7,0 7,0 7,0 7,1 7,1 7,1 6,1 6,1 6,1 6,2 6,2 6,2 5,2 5,2 5,2 5,3 5,3 5,3 4,3 4,3 4,3 4,4 4,4 4,4 3,4 3,4 3,4 3,3 3,3 3,3 2,3 2,3 2,3 2,2 2,2 2,2 1,2 1,2 1,2 1,1 1,1 1,1 0,1 0,1 z"
Fill="White" />
</Grid>
</xctk:ButtonChrome>
</Grid>
</ToggleButton>
</Grid>
</xctk:ButtonChrome>
<Popup IsOpen="{Binding IsChecked, ElementName=PART_ToggleButton}"
AllowsTransparency="True"
PopupAnimation="Slide">
<Grid x:Name="DropDown"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border x:Name="DropDownBorder" BorderBrush="{StaticResource StandardBorderColor}"
Background="{StaticResource ComboBoxBackgroundColor}" />
<ScrollViewer>
<ContentPresenter Content="{TemplateBinding DropDownContent}" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
<Style TargetType="xctk:SplitButton">
<Setter Property="Template" Value="{StaticResource SplitButtonTemplate}" />
</Style>

最佳答案

一种方法是添加一个 ListBox 作为 SplitButton 的内容。

您必须根据需要添加自定义代码以获得您想要的确切行为,但这里有一个帮助您入门的示例:

<xctk:SplitButton x:Name="btnSplit" Content="Select a product...">
<xctk:SplitButton.DropDownContent>
<ListBox ItemsSource="..."
SelectionChanged="ListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</xctk:SplitButton.DropDownContent>
</xctk:SplitButton>

private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
ListBox content = (ListBox)sender;
btnSplit.Content = ((DataRowView)content.SelectedItem)["ProductName"].ToString();
btnSplit.IsOpen = false;
}

关于c# - 扩展工具包 SplitButton : use ComboBox ItemsSource as DropDownContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37323759/

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