0

理解できない奇妙なスタイリングの問題があります。私が達成したいのは、データグリッドセルの HyperlinkBut​​tons が、マウスがリンクの上に置かれたときに下線でスタイルされることです。

次のように、XAML で HyperlinkBut​​ton 要素を宣言する列が 1 つあります。

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

これはうまくいきます - リンクは私が望むようにスタイルされています。別の列では、バインドされた要素の情報に基づいて n 個の HyperlinkBut​​tons を表示する必要があります。したがって、0..n ハイパーリンク ボタンをレンダリングするユーザー コントロールを作成しました。コントロールは、次のように 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 で直接宣言されているハイパーリンク ボタンに下線が表示されるのに、コード ビハインドでレンダリングされるハイパーリンクに下線が表示されない理由がわかりません。誰かがこれについて私を助けてくれますか?

このスレッドの hyperlinkbutton スタイルを使用しました: 1

4

1 に答える 1

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>

ハイパーリンクボタンのスタイルを設定する必要はありません。私の場合は完全に機能します。下線を追加し、マウスを上に移動したときに太字にします。

于 2013-01-11T14:06:57.400 に答える