我有一个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>
答案 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);
}
}