У меня есть столбец сетки данных с кнопками гиперссылки.Вы должны нажать кнопку дважды, чтобы кнопка сделала то, что должна.Я думаю, что первый щелчок на самом деле выбирает строку.
Я полагаю, что что-то происходит, когда событие не всплывает (или не падает?) К кнопке гиперссылки.
Идеи?
edit
Вот xaml:
<sdk:DataGrid Grid.Row="1" x:Name="workflowsGrid" Margin="6,20,6,0" ItemsSource="{Binding FilteredSource,ElementName=workflowsFilter}"
AutoGenerateColumns="False" SelectedItem="{Binding SelectedWorkflow,Mode=TwoWay}"
SelectionChanged="workflowsGrid_SelectionChanged">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Name" Binding="{Binding Description}"/>
<sdk:DataGridTemplateColumn Header="Action" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding Converter={StaticResource actionConverter}}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
А вот конвертер, который добавляет кнопки гиперссылки:
/// <summary>
/// Dynamically controls the action cell in the workflows grid
/// </summary>
protected class ActionValueConverter : IValueConverter
{
private WorkflowManager _page;
public ActionValueConverter(WorkflowManager page)
{
_page = page;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var workflow = (WorkflowInstance)value;
if (workflow.Status == "Complete")
{
// create hyperlink buttons for each action that the workflow supports
var btns = workflow.Definition.Actions
.Select(x =>
{
HyperlinkButton btn = new HyperlinkButton
{
Tag = Tuple.Create(workflow, x.Key),
Content = x.Value,
};
btn.Click += new RoutedEventHandler(_page.ActionButton_Click);
return btn;
});
// stack panel to contain all the buttons
StackPanel sp = new StackPanel { Orientation = Orientation.Vertical };
foreach (var btn in btns)
sp.Children.Add(btn);
return sp;
}
else if (workflow.Status == "In Progress")
{
// create only a cancel hyperlink button
HyperlinkButton btnCancel = new HyperlinkButton { Content = "Cancel", Tag = Tuple.Create(workflow, "Cancel") };
btnCancel.Click += new RoutedEventHandler(_page.ActionButton_Click);
return btnCancel;
}
else
{
throw new Exception("workflow status not supported: " + workflow.Status);
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}