【问题标题】:Telerik Cover Flow bubbling events from user control来自用户控制的 Telerik Cover Flow 冒泡事件
【发布时间】:2013-01-23 00:03:03
【问题描述】:

我有一个 telrik coverflow,其中的磁贴属于 InfoPageView 类型,一个用户控件。我在 InfoPageView 用户控件中有一个按钮,我想从中触发父级事件。 我尝试在这篇文章中实施解决方案: Expose a Click event of a button inside a UserControl in Silverlight 但我无法在父类中获取 childs 事件。有没有其他方法可以做到这一点?

<telerikNavigation:RadCoverFlow x:Name="CoverFlow" Grid.Row="0" OffsetY="0" ItemsSource="{Binding Covers}" HorizontalAlignment="Center"
                DistanceBetweenItems="75" DistanceFromSelectedItem="25"  IsReflectionEnabled="False" ItemScale="0.5"  Margin="0,0,0,0" Width="785" Height="486">
                <telerikNavigation:RadCoverFlow.ItemTemplate>
                    <DataTemplate>
                        <local:InfoPageView Name="Custinfopage" Width="390" Height="390" />
                    </DataTemplate>
                </telerikNavigation:RadCoverFlow.ItemTemplate>
            </telerikNavigation:RadCoverFlow>

【问题讨论】:

  • “父级”是什么意思,您是想在 RadCoverFlow 控件中“触发事件”,还是在 InfoPageView 中?你的最终目标是什么?
  • 我想在 RadCoverflow 控件/或托管 RadCoverflow [父] 的视图中捕获事件,问题是它是由 InfoPageView 中的按钮生成的。

标签: c# silverlight mvvm telerik coverflow


【解决方案1】:

如果您坚持让事件从您的内部视图中冒出来,您将需要依赖路由事件。该按钮会将 LeftMouseButtonDown 事件标记为已处理,这意味着您不能只使用直接的事件处理程序。不过,您可以做的是为已处理的事件设置一个侦听器。

您需要验证事件是否源自您想要的按钮,或许在该按钮上使用标签就足够了。

public MyOuterPage()
{
    InitializeComponent();
    this.AddHandler(UIElement.MouseLeftButtonDownEvent, new System.Windows.Input.MouseButtonEventHandler(MyMouseLeftButtonDownEventHandler), true);
}

void MyMouseLeftButtonDownEventHandler(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var button = e.OriginalSource as Button;
    if (button.Tag == "MyButton")
    {
        // do something with the event here
    }
}

【讨论】:

    【解决方案2】:

    我无法通过代码隐藏 .cs 文件在我的主页上捕获 InfoPage 用户控件。所以我在 xaml 中注入了事件:

    <local:InfoPageView Name="Custinfopage" Width="390" Height="390" OnButtonClick="Button_click_event" />
    

    在主 .CS 文件中:

    void Button_click_event(object sender, RoutedEventArgs e)
    {
    
            // Code
    }
    

    在用户控件中:

    public event EventHandler<RoutedEventArgs> OnButtonClick;
    
        public void Button_Click(object sender, RoutedEventArgs e)
                {
    
                    if (OnButtonClick!= null){
                            OnButtonClick(sender, e);
                    }
    
                }
    

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 2012-07-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多