自定义控件中的Silverlight HyperlinkBut​​ton样式

时间:2013-01-10 10:20:34

标签: silverlight xaml

我有一个奇怪的造型问题,我无法弄清楚。 我想要实现的是当鼠标悬停链接时,数据网格单元格中的HyperlinkBut​​tons使用下划线进行样式化。

我有一个列,我在XAML中声明了HyperlinkBut​​ton元素,如下所示:

<HyperlinkButton Style="{StaticResource HyperlinkButtonStyle}" DataContext="{Binding}" FontSize="11" Content="{Binding DguNr}" Click="DgunrHyperlinkButtonClick" />

这很好用 - 链接按照我的要求设置样式。 在另一列中,我需要根据绑定元素中的一些信息显示n个HyperlinkBut​​tons。因此我创建了一个usercontrol,它将呈现0..n Hyperlinkbuttons。控件在XAML中声明如下:

<sdk:DataGridTemplateColumn IsReadOnly="True" CanUserSort="True">
                        <sdk:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <bc:BoreholePlantGridColumn Plants="{Binding Plants, Mode=OneWay}" />
                            </DataTemplate>
                        </sdk:DataGridTemplateColumn.CellTemplate>
                    </sdk:DataGridTemplateColumn>

控件的代码如下所示:

public partial class BoreholePlantGridColumn : UserControl, INotifyPropertyChanged
{
    public BoreholePlantGridColumn()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(BoreholePlantGridColumn_Loaded);
    }

    void BoreholePlantGridColumn_Loaded(object sender, RoutedEventArgs e)
    {
        var borehole = (SelectableBoring)this.DataContext;
        foreach(var p in borehole.Plants)
        {
            // <HyperlinkButton HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" DataContext="{Binding}" Foreground="Black" FontSize="11" Content="{Binding DguNr}" Click="DgunrHyperlinkButtonClick" />
            var button = new HyperlinkButton();
            button.Content = p.PlantId;
            button.Style = (Style)App.Current.Resources["HyperlinkButtonStyle"];
            button.VerticalContentAlignment = VerticalAlignment.Center;
            var url = String.Format(Common.Constants.Url.GeusPlantLinkTemplate, p.PlantId);
            button.NavigateUri = new Uri(url, UriKind.RelativeOrAbsolute);
            button.TargetName = "_blank";
            LayoutRoot.Children.Add(button);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public static readonly DependencyProperty PlantsProperty = DependencyProperty.Register("Value", typeof(Anlaeg), typeof(BoreholePlantGridColumn), new PropertyMetadata(new PropertyChangedCallback(ValueChanged)));

    public IList<Anlaeg> Plants
    {
        get { return (IList<Anlaeg>)this.GetValue(PlantsProperty); }
        set { this.SetValue(PlantsProperty, value); }
    }

    private static void ValueChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        var myUC = (BoreholePlantGridColumn)obj;
        var newValue = (IList<Anlaeg>)e.NewValue;


    }
}

这几乎按预期工作;链接按钮以正确的颜色呈现 - 但是当鼠标悬停链接时,没有显示下划线文本。 我不明白为什么下划线显示在直接在XAML中声明的超链接按钮中,而不是在代码隐藏中呈现的超链接中。有人可以帮我这个吗?

我使用了此主题的超链接按钮样式:1

1 个答案:

答案 0 :(得分:0)

我只使用以下代码

<ListBox Grid.Column="1" ItemsSource="{Binding EncyclopediaList}" HorizontalContentAlignment ="Stretch" Margin="5,0" >
    <ListBox.ItemTemplate>
      <DataTemplate>
         <HyperlinkButton Content="{Binding Name}" Foreground="Black" Command="{Binding ViewArticlePageCommand, Source={StaticResource EncyclopediaViewModel}}" CommandParameter="{Binding ServerEncyclopediaID}" FontFamily="Arial" FontSize="18" />
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

无需在我的案例中完美地设置HyperlinkBut​​ton的工作效果添加下划线并在鼠标移过它时将其设为粗体。