我正在尝试创建一个具有"可点击的DataGrid"位于其中的文本。在我提供的示例中,我想点击Bid
或Ask
价格并触发处理程序。我想这就像拥有一个触发函数而不是浏览器的超链接。处理程序将用于使用位于所选Bid
或Ask
行中的数据填充列表。我不确定如何处理这个问题,我们将非常感谢您的建议。
我现在拥有的内容:
XAML
<UserControl.Resources>
<local:Options x:Key="Options"/>
</UserControl.Resources>
<DataGrid AutoGenerateColumns="True"
Grid.Row="0"
Grid.Column="1"
RowHeaderWidth="0"
AlternationCount="2"
x:Name="AGrid"
ItemsSource="{StaticResource Options}"
CanUserAddRows="False"
ColumnWidth="*"
IsReadOnly="True">
</DataGrid>
C#
public class Option
{
public int Strike { get; set; }
public int Bid { get; set; }
public int Ask { get; set; }
public Option()
{
}
}
public class Options : List<Option>
{
public Options()
{
this.Add(new Option() { Strike = 120, Bid = 20, Ask = 25 });
this.Add(new Option() { Strike = 130, Bid = 30, Ask = 35 });
this.Add(new Option() { Strike = 140, Bid = 40, Ask = 45 });
}
}
}
答案 0 :(得分:0)
如果只想要列标题按钮,则应使用columnheaderstyle并将模板设置为按钮,否则可以使用celltemplate。
以下代码应该按照您的要求工作。我只为列标题实现了它。
<DataGrid ItemsSource="{Binding DataGridData}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Button Content="{Binding}">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline" FontWeight="Bold">
<ContentPresenter />
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>