C# 在ItemsControl ResourceDictionary中设置删除日期

C# 在ItemsControl ResourceDictionary中设置删除日期,c#,xaml,delegates,itemscontrol,resourcedictionary,C#,Xaml,Delegates,Itemscontrol,Resourcedictionary,首先,让我向您展示我的代码是如何被剪切的 我在xaml UC(eventsUC.xaml)中有以下代码: 当我在模板中单击listview的某个项目时,它会触发eventsList\u MouseDoubleCkick,我可以检索我的事件 但是,我想在创建模板的UC中触发一个操作(第一个源代码块) 为此,我只想在模板中创建一个委托(从技术上讲,在一个完美的世界中,类似于“this.rd_eventslisttemplate.MainWindowControlPointer=…”)。但是,我不知道

首先,让我向您展示我的代码是如何被剪切的

我在xaml UC(eventsUC.xaml)中有以下代码:

当我在模板中单击listview的某个项目时,它会触发eventsList\u MouseDoubleCkick,我可以检索我的事件

但是,我想在创建模板的UC中触发一个操作(第一个源代码块)


为此,我只想在模板中创建一个委托(从技术上讲,在一个完美的世界中,类似于“this.rd_eventslisttemplate.MainWindowControlPointer=…”)。但是,我不知道怎么做,也不知道这是否可能。

在对你的问题加密一段时间后,我想我明白了

有一个很好的方法叫做VisualTreeHelper.GetParent(),它可以在VisualTree中获取控件的父级

现在,当您在EventsListTemplate中捕获事件时,需要多次调用GetParent(),直到最终获得UserControl实例


就这样。

您有一个模板。在模板中有一个按钮。当您单击按钮时,您可以调用使用模板的控件内的方法。基本上,您希望调用ItemsControl中的方法。我说得对吗?现在,当我点击按钮时,它调用了模板中的一个方法。我想做的是调用一个方法,它实际上位于使用模板的控件内。使用模板的控件是ItemsControl,对吗?那么您希望调用的方法的名称是什么?哦,对不起,我不明白您所说的。我用更多的代码更新了我的帖子。我的ItemsControl位于UserControl(EventsListUC)中。我希望在此usercontrol中捕获事件。我尝试使用“var parent=VisualTreeHelper.GetParent(this);”但它有一个编译错误:“与'System.Windows.Media.VisualTreeHelper.GetParent(System.Windows.DependencyObject)'匹配的最佳重载方法有一些无效参数”,“无法从'QuimeO.UserControls.List.EventsListTemplate'转换为'System.Windows.DependencyObject'”好的,得到了:VisualTreeHelper.GetParent(发件人作为DependencyObject);可以工作。谢谢,我现在将尝试获得我的UserControl:)是的,你得到了。只允许DependencyObject。
<UserControl x:Class="QuimeO.UserControls.Lists.EventsListUC"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:ToggleSwitch="clr-namespace:ToggleSwitch;assembly=ToggleSwitch" 
         mc:Ignorable="d" 
         Width="477"
         >
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <ScrollViewer HorizontalScrollBarVisibility="Disabled" Width="auto" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <ItemsControl Grid.Row="0" BorderThickness="0" x:Name="eventsList" ScrollViewer.VerticalScrollBarVisibility="Auto" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ItemsControl.Resources>
                <ResourceDictionary x:Name="eventslisttempplate" Source="EventsListTemplate.xaml"  />
            </ItemsControl.Resources>
        </ItemsControl>
    </ScrollViewer>...
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="QuimeO.UserControls.Lists.EventsListTemplate"
                    xmlns:apiNamespace="clr-namespace:QuimeO.DBO"
                    >
    <DataTemplate DataType="{x:Type apiNamespace:EventsDictionary}">
        <StackPanel Orientation="Vertical">
            <Border BorderBrush="LightGray" BorderThickness="0,0,0,1" Margin="0,5,0,0">
                <TextBlock HorizontalAlignment="Right" Foreground="Gray" Text="{Binding FormatedDate}" FontSize="14"></TextBlock>
            </Border>
            <ListView Grid.Row="0" x:Name="eventsList" ItemsSource="{Binding Events}" BorderThickness="0" MouseDoubleClick="eventsList_MouseDoubleClick">
            </ListView>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>
public partial class EventsListTemplate : ResourceDictionary
    {
        public Delegate MainWindowControlPointer;

        private void eventsList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            var ev = ((sender as ListView).SelectedItem as ListViewItem).DataContext as Event;
            System.Diagnostics.Debug.WriteLine(ev.Name);

            this.MainWindowControlPointer.DynamicInvoke(ev.Ancestors.Root, new Element() { Category = ev.Category, Id = ev.Id, Name = ev.Name });
        }
    }