C# 如何获取WPF ListBoxItem属性的值
您好,我正在尝试设置我的ListBoxItem属性的值,只是不确定在这种情况下如何使用绑定如果有人可以帮助我,我非常感谢 低于XAMLC# 如何获取WPF ListBoxItem属性的值,c#,wpf,xaml,C#,Wpf,Xaml,您好,我正在尝试设置我的ListBoxItem属性的值,只是不确定在这种情况下如何使用绑定如果有人可以帮助我,我非常感谢 低于XAML <ControlTemplate TargetType="controls:ModernVerticalMenu"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="{TemplateBinding List
<ControlTemplate TargetType="controls:ModernVerticalMenu">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{TemplateBinding ListWidth}"/>
<ColumnDefinition Width="{TemplateBinding ListWidth}"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Background="{TemplateBinding BackColor}" Height="{TemplateBinding Height}" BorderThickness="1" BorderBrush="{DynamicResource bordaSuperior}">
<!-- link list -->
<ListBox x:Name="LinkList" ItemsSource="{Binding Links, RelativeSource={RelativeSource TemplatedParent}}"
ScrollViewer.HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="50" Background="Transparent" Width="500">
<Border Name="border" Padding="10">
<Path x:Name="icon" Data="{Binding IconData}" Stretch="Fill" Fill="{DynamicResource Accent}" Width="20" Height="20" HorizontalAlignment="Left" VerticalAlignment="Center" />
</Border>
<TextBlock x:Name="texto" ToolTip="{Binding Tooltip}" Text="{Binding DisplayName}" Margin="45,2,2,2" FontSize="{DynamicResource MediumFontSize}" TextTrimming="CharacterEllipsis" VerticalAlignment="Center" HorizontalAlignment="Left" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IconData}" Value="{x:Null}">
<Setter Property="Margin" TargetName="texto">
<Setter.Value>
<Thickness Bottom="2" Top="2" Left="10" Right="2"/>
</Setter.Value>
</Setter>
</DataTrigger>
<Trigger Property="IsMouseOver" Value="true">
<Trigger.Setters>
<Setter Property="Fill" TargetName="icon">
<Setter.Value>
<SolidColorBrush Color="#f2f2f2" />
</Setter.Value>
</Setter>
</Trigger.Setters>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ListBoxItem.IsMouseOver" SourceName="LinkList" Value="true">
<Trigger.Setters>
<Setter Property="SelectedLinkGroup" Value="{Binding Source=LinkList,Path=Children}"/>
</Trigger.Setters>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
在下面的代码中,我试图将SelectedLinkGroup From属性的值设置为引用ListBoxItem链接列表的子项的值
<Setter Property="SelectedLinkGroup" Value="{Binding Source=LinkList,Path=Children}"/>
使用FirstFloor.ModernUI.Presentation;
使用制度;
使用系统数据;
使用System.Linq;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
命名空间FirstFloor.ModernUI.Windows.Controls
{
///
///表示包含在屏幕上共享相同空间的多个页面的控件。
///
公共类ModernVerticalMenu
:控制
{
///
///标识ContentLoader依赖项属性。
///
public static readonly dependencProperty ContentLoaderProperty=dependencProperty.Register(“ContentLoader”、typeof(IContentLoader)、typeof(ModernVerticalMenu)、new PropertyMetadata(new DefaultContentLoader());
///
///标识ListWidth依赖项属性。
///
公共静态只读DependencyProperty ListWidthProperty=DependencyProperty.Register(“ListWidth”、typeof(GridLength)、typeof(ModernVerticalMenu)、new PropertyMetadata(new GridLength(170));
///
///标识链接依赖项属性。
///
public static readonly dependencProperty Links property=dependencProperty.Register(“Links”、typeof(LinkCollection)、typeof(ModernVerticalMenu)、new PropertyMetadata(OnLinksChanged));
///
///标识SelectedSource依赖项属性。
///
public static readonly dependencProperty SelectedSourceProperty=dependencProperty.Register(“SelectedSource”、typeof(Uri)、typeof(ModernVerticalMenu)、new PropertyMetadata(OnSelectedSourceChanged));
///
///定义SelectedLinkGroup依赖项属性。
///
public static readonly dependencProperty SelectedLinkGroupProperty=dependencProperty.Register(“SelectedLinkGroup”、typeof(LinkCollection)、typeof(ModernVerticalMenu)、new PropertyMetadata(OnSelectedLinkGroupChanged));
///
///定义SelectedLink依赖项属性。
///
public static readonly dependencProperty SelectedLinkProperty=dependencProperty.Register(“SelectedLink”、typeof(Link)、typeof(ModernVerticalMenu)、new PropertyMetadata(OnSelectedLinkChanged));
///
///定义SelectedLink依赖项属性。
///
public static readonly dependencProperty BackColorProperty=dependencProperty.Register(“BackColor”、typeof(SolidColorBrush)、typeof(ModernVerticalMenu)、new PropertyMetadata(null));
///
///在选定源发生更改时发生。
///
公共事件处理程序SelectedSourceChanged;
私有列表框链接列表;
///
///初始化控件的新实例。
///
公共现代虚拟菜单()
{
this.DefaultStyleKey=typeof(ModernVerticalMenu);
//this.BackColor=新的SolidColorBrush(Color.FromRgb(0,0255));
//创建默认链接集合
SetCurrentValue(LinksProperty,new LinkCollection());
}
SelectedLinkGroupChanged上的私有静态无效(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
//从组中检索所选链接
var group=(LinkCollection)e.NewValue;//cria uma nova instancia do grupo
Link SELECTED Link=null;//cria um Link selecionado
如果(组!=null)
{//se o grupo copiado existe
selectedLink=group.FirstOrDefault();
}
//更新所选链接
((ModernVerticalMenu)o).SetCurrentValue(SelectedLinkProperty,selectedLink);
}
SelectedLinkChanged上的私有静态无效(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
//更新所选源
var newValue=(Link)e.newValue;
Uri selectedSource=null;
if(newValue!=null)
{
selectedSource=newValue.Source;
}
((ModernVerticalMenu)o).SetCurrentValue(SelectedSourceProperty,selectedSource);
}
私有静态void OnLinksChanged(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
((ModernVerticalMenu)o).UpdateSelection();
}
SelectedSourceChanged上的私有静态无效(DependencyObject o、DependencyPropertyChangedEventArgs e)
{
((ModernVerticalMenu)o).在选择时也是如此
using FirstFloor.ModernUI.Presentation;
using System;
using System.Data;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
namespace FirstFloor.ModernUI.Windows.Controls
{
/// <summary>
/// Represents a control that contains multiple pages that share the same space on screen.
/// </summary>
public class ModernVerticalMenu
: Control
{
/// <summary>
/// Identifies the ContentLoader dependency property.
/// </summary>
public static readonly DependencyProperty ContentLoaderProperty = DependencyProperty.Register("ContentLoader", typeof(IContentLoader), typeof(ModernVerticalMenu), new PropertyMetadata(new DefaultContentLoader()));
/// <summary>
/// Identifies the ListWidth dependency property.
/// </summary>
public static readonly DependencyProperty ListWidthProperty = DependencyProperty.Register("ListWidth", typeof(GridLength), typeof(ModernVerticalMenu), new PropertyMetadata(new GridLength(170)));
/// <summary>
/// Identifies the Links dependency property.
/// </summary>
public static readonly DependencyProperty LinksProperty = DependencyProperty.Register("Links", typeof(LinkCollection), typeof(ModernVerticalMenu), new PropertyMetadata(OnLinksChanged));
/// <summary>
/// Identifies the SelectedSource dependency property.
/// </summary>
public static readonly DependencyProperty SelectedSourceProperty = DependencyProperty.Register("SelectedSource", typeof(Uri), typeof(ModernVerticalMenu), new PropertyMetadata(OnSelectedSourceChanged));
/// <summary>
/// Defines the SelectedLinkGroup dependency property.
/// </summary>
public static readonly DependencyProperty SelectedLinkGroupProperty = DependencyProperty.Register("SelectedLinkGroup", typeof(LinkCollection), typeof(ModernVerticalMenu), new PropertyMetadata(OnSelectedLinkGroupChanged));
/// <summary>
/// Defines the SelectedLink dependency property.
/// </summary>
public static readonly DependencyProperty SelectedLinkProperty = DependencyProperty.Register("SelectedLink", typeof(Link), typeof(ModernVerticalMenu), new PropertyMetadata(OnSelectedLinkChanged));
/// <summary>
/// Defines the SelectedLink dependency property.
/// </summary>
public static readonly DependencyProperty BackColorProperty = DependencyProperty.Register("BackColor", typeof(SolidColorBrush), typeof(ModernVerticalMenu), new PropertyMetadata(null));
/// <summary>
/// Occurs when the selected source has changed.
/// </summary>
public event EventHandler<SourceEventArgs> SelectedSourceChanged;
private ListBox linkList;
/// <summary>
/// Initializes a new instance of the <see cref="ModernVerticalMenu"/> control.
/// </summary>
public ModernVerticalMenu()
{
this.DefaultStyleKey = typeof(ModernVerticalMenu);
// this.BackColor = new SolidColorBrush(Color.FromRgb(0,0,255));
// create a default links collection
SetCurrentValue(LinksProperty, new LinkCollection());
}
private static void OnSelectedLinkGroupChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
// retrieve the selected link from the group
var group = (LinkCollection)e.NewValue; // cria uma nova instancia do grupo
Link selectedLink = null; //cria um link selecionado
if (group != null)
{ //se o grupo copiado existe
selectedLink = group.FirstOrDefault();
}
// update the selected link
((ModernVerticalMenu)o).SetCurrentValue(SelectedLinkProperty, selectedLink);
}
private static void OnSelectedLinkChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
// update selected source
var newValue = (Link)e.NewValue;
Uri selectedSource = null;
if (newValue != null)
{
selectedSource = newValue.Source;
}
((ModernVerticalMenu)o).SetCurrentValue(SelectedSourceProperty, selectedSource);
}
private static void OnLinksChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
((ModernVerticalMenu)o).UpdateSelection();
}
private static void OnSelectedSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
((ModernVerticalMenu)o).OnSelectedSourceChanged((Uri)e.OldValue, (Uri)e.NewValue);
}
private void OnSelectedSourceChanged(Uri oldValue, Uri newValue)
{
UpdateSelection();
// raise SelectedSourceChanged event
var handler = this.SelectedSourceChanged;
if (handler != null) {
handler(this, new SourceEventArgs(newValue));
}
}
private void UpdateSelection()
{
if (this.linkList == null || this.Links == null) {
return;
}
// sync list selection with current source
this.linkList.SelectedItem = this.Links.FirstOrDefault(l => l.Source == this.SelectedSource);
// SetValue(SelectedLinkGroupProperty, this.Links.FirstOrDefault(l => l.Children == this.SelectedLinkGroup));
if (this.Links.FirstOrDefault(l => l.Children == this.SelectedLinkGroup) != null) { }
}
/// <summary>
/// When overridden in a derived class, is invoked whenever application code or internal processes call System.Windows.FrameworkElement.ApplyTemplate().
/// </summary>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (this.linkList != null) {
this.linkList.SelectionChanged -= OnLinkListSelectionChanged;
}
this.linkList = GetTemplateChild("LinkList") as ListBox;
if (this.linkList != null) {
this.linkList.SelectionChanged += OnLinkListSelectionChanged;
}
UpdateSelection();
}
private void OnLinkListSelectionChanged(object sender, SelectionChangedEventArgs e)
{
//
var link = this.linkList.SelectedItem as Link;
if (link != null && link.Source != this.SelectedSource)
{
SetCurrentValue(SelectedSourceProperty, link.Source);
SetCurrentValue(SelectedLinkGroupProperty, link.Children);
}
}
/// <summary>
/// Gets or sets the content loader.
/// </summary>
public IContentLoader ContentLoader
{
get { return (IContentLoader)GetValue(ContentLoaderProperty); }
set { SetValue(ContentLoaderProperty, value); }
}
/// <summary>
/// Gets or sets the collection of links that define the available content in this tab.
/// </summary>
public LinkCollection Links
{
get { return (LinkCollection)GetValue(LinksProperty); }
set { SetValue(LinksProperty, value); }
}
/// <summary>
/// Gets or sets the collection of links that define the available content in this tab.
/// </summary>
public LinkCollection SelectedLinkGroup
{
get { return (LinkCollection)GetValue(SelectedLinkGroupProperty); }
set { SetValue(SelectedLinkGroupProperty, value); }
}
/// <summary>
/// Gets or sets the collection of links that define the available content in this tab.
/// </summary>
public Link SelectedLink
{
get { return (Link)GetValue(SelectedLinkProperty); }
set { SetValue(SelectedLinkProperty, value); }
}
/// <summary>
/// Gets or sets the width of the list when Layout is set to List.
/// </summary>
/// <value>
/// The width of the list.
/// </value>
public GridLength ListWidth
{
get { return (GridLength)GetValue(ListWidthProperty); }
set { SetValue(ListWidthProperty, value); }
}
/// <summary>
/// Gets or sets the source URI of the selected link.
/// </summary>
/// <value>The source URI of the selected link.</value>
public Uri SelectedSource
{
get { return (Uri)GetValue(SelectedSourceProperty); }
set { SetValue(SelectedSourceProperty, value); }
}
/// <summary>
/// Gets or sets the source URI of the selected link.
/// </summary>
/// <value>The source URI of the selected link.</value>
public SolidColorBrush BackColor
{
get { return (SolidColorBrush)GetValue(BackColorProperty); }
set { SetValue(BackColorProperty, value); }
}
}
}
Value="{Binding Links, RelativeSource={RelativeSource TemplatedParent}}"
Value="{Binding ElementName=LinkList, Path=ItemsSource}"