C# 如何获取WPF ListBoxItem属性的值

C# 如何获取WPF ListBoxItem属性的值,c#,wpf,xaml,C#,Wpf,Xaml,您好,我正在尝试设置我的ListBoxItem属性的值,只是不确定在这种情况下如何使用绑定如果有人可以帮助我,我非常感谢 低于XAML <ControlTemplate TargetType="controls:ModernVerticalMenu"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="{TemplateBinding List

您好,我正在尝试设置我的ListBoxItem属性的值,只是不确定在这种情况下如何使用绑定如果有人可以帮助我,我非常感谢

低于XAML

<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}"