0

我有一个 telrik coverflow,其中的磁贴属于 InfoPageView 类型,一个用户控件。我在 InfoPageView 用户控件中有一个按钮,我想从中触发父事件。我尝试在这篇文章中实现解决方案: 在 Silverlight 中的 UserControl 内公开按钮的 Click 事件,但我无法在父类中获取 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>
4

2 回答 2

1

我无法通过代码隐藏 .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-02-11T05:05:36.503 回答
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
    }
}
于 2013-02-09T14:35:03.590 回答