我在Expander Header中有多个Texblock.我希望这些TextBlocks与Left,Right和Center对齐.
我怎样才能实现这一目标?
请帮忙...
谢谢
沙拉斯
红色文本应保持对齐,蓝色文本应居中对齐,绿色应右对齐
请复制XAMLPad.Exe中的代码
我在ListBox的ItemTemplate中有一个Expander.渲染很好.我遇到的问题是我希望扩展和/或选择扩展器时触发ListBox_SelectionChanged事件.MouseDown事件似乎没有冒泡到ListBox.
我需要的是ListBox的SelectedIndex.因为ListBox_SelectionChanged没有被触发,索引是-1,我无法确定选择了哪个项目.
如果用户在展开后单击扩展器的内容,则会触发ListBox_SelectionChanged事件.如果他们只点击扩展器,则不会触发该事件.这让用户感到困惑,因为在视觉上,他们认为他们在实际点击Expander Header时已经点击了该项目.我需要在用户扩展扩展器时选择ListBox项目,因为就用户而言,该项目现在被选中,而实际上并非如此.
有关如何使其工作的任何建议或使用扩展器确定列表框的SelectedIndex的替代方法?
简化代码供参考:
<Window x:Class="WpfApplication3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
Loaded="Window_Loaded">
<Grid Name="Root">
<ScrollViewer>
<ListBox SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding}">
<ItemsControl.ItemTemplate >
<DataTemplate>
<Border>
<Expander>
<Expander.Header>
<TextBlock Text="{Binding Path=Name}"/>
</Expander.Header>
<Expander.Content>
<StackPanel>
<TextBlock Text="{Binding Path=Age}"/>
<TextBlock Text="Line 2"/>
<TextBlock Text="Line 3"/>
</StackPanel>
</Expander.Content>
</Expander>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
</ScrollViewer>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
简单的绑定类:
public class Person
{
public string Name {
get;
set;
}
public int Age {
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
创建和填充绑定数据:
private void Window_Loaded(object sender, RoutedEventArgs e) {
data …
Run Code Online (Sandbox Code Playgroud) 嗨,我想知道是否可以将WPF扩展器控件上的切换按钮对齐到最右侧?
我想从下面的问题中找到扩展器(参见接受的答案),这对我来说是一个完美的解决方案.我只想把它放在右边.
为了让它从右向左扩展,我改变了类似行为的设置.(我强调了能够更好地了解正在发生的事情的因素):
<Expander Grid.Column="1" Header="Test" ExpandDirection="Left"
BorderThickness="10" BorderBrush="Black" HorizontalAlignment="Right" >
<Expander.Content>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="0" Width="10" Background="Green"
ResizeDirection="Columns" ResizeBehavior="CurrentAndNext" />
<TextBox Grid.Column="1" Text="Lorem ipsum dolor sit"
BorderThickness="10" BorderBrush="Red"/>
</Grid>
</Expander.Content>
</Expander>
Run Code Online (Sandbox Code Playgroud)
当我将分离器向右移动时,它会调整分离器左侧区域的大小.我尝试了很多其他组合,但它几乎导致了相同的不良行为.分离器左侧区域有时会发生奇怪的爆炸,但TextBox保持不变.
我想要一个WPF扩展器控件,其中标头与主内容区域重叠.
使用以下XAML
<Expander Header="Details" ExpandDirection="Left">
<Grid Background="Blue">
<TextBlock Text="Details content" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" Foreground="White"></TextBlock>
</Grid>
</Expander>
<ScrollViewer Background="Red" HorizontalScrollBarVisibility="Visible" Grid.Column="1">
<Grid Background="Red">
<TextBlock Text="Main content" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" />
</Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
我最终得到:
我想删除白色区域并在内容区域的左上角有箭头,与红色背景重叠.maps.bing.com就是一个类似的例子.
我刚刚注意到这个问题,每当我选择一个父级是复选框的扩展器时,它会触发已检查/未选中的事件,即使未选中该复选框也是如此.
这是一个显示它发生的.gif文件.右上角的数字表示选中的复选框的数量,我设置为只在选中或取消选中框时向上和向下计数.然而,柜台本身不是担心,只是一种表明它发生的方式.
对于每个复选框,他们Checked
和UnChecked
事件指向我选择的方法.
造成这种情况的原因是什么,我该如何防止这种情况发生?
编辑:XAML
<Expander Loaded="VerifyExpanderLoaded" ExpandDirection="Down" IsExpanded="True" FontSize="14" FontWeight="Bold" Margin="5" BorderThickness="1" BorderBrush="#FF3E3D3D">
<Expander.Header>
<DockPanel RenderTransformOrigin="0.5,0.5" LastChildFill="False" Margin="0" HorizontalAlignment="Stretch">
<TextBlock Text="Verify Caller and Account" DockPanel.Dock="Left" VerticalAlignment="Center" Margin="0"/>
<Button DockPanel.Dock="Right" Margin="1,0" Click="VerifyUncheckAll">
<TextBlock Text="Uncheck All" Margin="1,0" FontSize="12" FontWeight="Normal"/>
</Button>
<Button DockPanel.Dock="Right" Margin="1,0" Click="VerifyCheckAll">
<TextBlock Text="Check All" FontSize="12" FontWeight="Normal" Margin="1,0"/>
</Button>
<TextBlock x:Name="VerifyCheckboxCount" Text="0/0" DockPanel.Dock="Right" VerticalAlignment="Center" FontSize="16" FontWeight="Bold" Margin="0,0,10,0"/>
</DockPanel>
</Expander.Header>
<ListBox Background="{x:Null}" BorderBrush="{x:Null}">
<CheckBox x:Name="Authentication_CallerName_Checkbox" HorizontalAlignment="Center" Margin="10,5,0,0" Grid.ColumnSpan="2" FontSize="12" VerticalAlignment="Center" Checked="VerifyCheckBoxChecked" Unchecked="VerifyCheckBoxChecked">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"> …
Run Code Online (Sandbox Code Playgroud) 我知道这System.Windows.Controls.Expander
是WPF中的另一个"headered"内容控件,类似于System.Windows.Controls.GroupBox
.一个优点是Expanders
能够通过折叠隐藏其内容,并通过扩展显示内容.
我的问题是,如果我想让我Expander
从左到右或从右到左水平滑动而不是垂直滑动怎么办?让我们说我有以下内容Expander
:
<StackPanel x:Name="RightPanel">
<Expander x:Name="ExportExpander">
<StackPanel>
<TextBlock Name="x" Text="Element One"/>
<Button Name="y" Content="Element Two"/>
</StackPanel>
</Expander>
</StackPanel>
Run Code Online (Sandbox Code Playgroud) 我使用详细信息/摘要元素来获取可扩展部分:
https://www.w3schools.com/TAGS/tag_details.asp
d3.select('details')
.on('click',()=>{
alert('clicked');
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<details>
<summary>Header</summary>
<p>Content</p>
<p>Content</p>
</details>
Run Code Online (Sandbox Code Playgroud)
我想在切换详细信息元素的打开状态时执行操作。我怎样才能这样做呢?
如果我要使用该onclick
事件,则当用户单击摘要或内容时也会触发该事件。我只想处理“点击切换箭头”。
所以我想要一个项目列表,当你选择它们时,它们会展开以显示更多信息(没有toggleButton).
我想有多种方法可以做到这一点,但我开始的是我有一个ListView绑定到viewModel集合,然后将ViewModel视图定义为Expander.这里的问题是绑定所选的一个进行扩展.
我开始就如何以不同的方式完成这项工作获得多个想法.也许修改ListView的ControlTemplate,将它的项目设置为我自己的扩展器类型.但是我不确定在为列表设置ItemsSource时效果如何.
问题是我不太确定这里最好的方法是什么.
我有一个WPF MVVM应用程序,其中ScrollViewer包含一个带有多个Expanders的用户控件
<UserControl>
<Expander>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
...
</Grid.RowDefinitions>
<Expander Grid.Row="0" />
<Expander Grid.Row="1" />
...
</Grid>
</Expander>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使扩展的Expander滚动到视图中,以便它的内容可见?