Telerik Cover Flow来自用户控制的冒泡事件

时间:2013-02-07 13:12:17

标签: c# silverlight mvvm telerik coverflow

我有一个telrik coverflow,并且tile中的InfoSetView类型是一个用户控件。我在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>

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

我无法通过codebehind .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
}

在UserControl中:

public event EventHandler<RoutedEventArgs> OnButtonClick;

    public void Button_Click(object sender, RoutedEventArgs e)
            {

                if (OnButtonClick!= null){
                        OnButtonClick(sender, e);
                }

            }