14

Microsoft CodePlex プロジェクトの WPF データグリッドを使用しています。データグリッドの行からフィールドにデータバインドしたいカスタム コントロールがあります。データグリッド行でツールチップを指定する方法を理解することはできません。

最も近いのは、RowStyle を Setter と共に使用してツールチップを設定することですが、これはテキストに対してのみ機能するようです。ToolTip の値として ControlTempalte を配置しようとすると、ControlTemplate 型で ToString を呼び出した結果が表示されます。

ToolTipの「テンプレート」プロパティを設定する必要があると思いますが、その方法がわかりません...

  <dg:DataGrid Name="dgResults" AutoGenerateColumns="True">

            <dg:DataGrid.RowStyle >


            <Style TargetType="{x:Type dg:DataGridRow}">

                <Setter Property="ToolTip"  >
                    <Setter.Value>

                        <ControlTemplate TargetType="{x:Type ToolTip}">
                           <StackPanel>
                                 <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
                           </StackPanel>
                        </ControlTemplate>


                    </Setter.Value>
                </Setter>
            </Style>

        </dg:DataGrid.RowStyle>

  </dg:DataGrid>
4

6 に答える 6

28

気がついたら…6時間くらいかかった…

何らかの理由で、Value.Setter を使用して値を直接設定することはできません。ただし、ツールチップのコンテンツを静的リソースとして定義し、それを DataGrid.RowStyle の Style プロパティに設定すると機能します。

したがって、データグリッドの行スタイルは次のようになります。

            <Style TargetType="{x:Type dg:DataGridRow}">

                <Setter Property="ToolTip" Value="{StaticResource resKWIC}">
                </Setter>                 
            </Style>

        </dg:DataGrid.RowStyle>

そしてリソースは

<Window.Resources>
    <StackPanel x:Key="resKWIC">
        <TextBlock>f1</TextBlock>
        <TextBlock>f2></TextBlock>
    </StackPanel>
</Window.Resources>

ありがとう!

于 2009-04-28T09:20:46.373 に答える
6

重要なのは、次のように、ToolTip の代わりにプロパティ ToolTipService.ToolTip を使用することです。

<Setter Property="ToolTipService.ToolTip" Value="My Tooltip"/>
于 2010-03-12T00:06:13.200 に答える
0

XAMLを介してそれを実行できるかどうかはわかりません。

より簡単な方法は、LoadingRowイベントを処理することです。xamlには次のようなものがあります:

<dg:DataGrid Name="dgResults" AutoGenerateColumns="True" 
             LoadingRow="dgResults_LoadingRow" 
             ItemsSource="{Binding ListOfStrings}" />

次に、コードビハインドで

void dgResults_LoadingRow(object sender, DataGridRowEventArgs e)
{
    DataGridRow row = e.Row;
    row.ToolTip = row.DataContext as string;
}

明らかに、データグリッドにデータを入力する方法に応じてコードを変更する必要があります。これもテストされていません=)

于 2009-04-28T08:34:40.243 に答える
0

の必要はありませんControlTemplate。に が必要な場合はStackPanel、次のToolTipように設定します。

<Setter Property="ToolTip">
    <Setter.Value>
        <StackPanel>
            <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
        </StackPanel>
    </Setter.Value>
</Setter>
于 2009-04-28T07:16:40.383 に答える
0

セルの内容に基づいてツールチップを動的に設定する必要がありました。ツールチップを使用して、セルからテキスト オーバーフロー テキストを表示しています。以下のバインディングは、CellText という名前の ac# クラス プロパティからのものです。上記の投稿のおかげで、自分ですべてを理解することを避けることができました。

<DataGridTextColumn Header="HeaderText" Binding="{Binding DisplayText, Mode=OneWay}" Width="33*">
                            <DataGridTextColumn.CellStyle>
                                <Style>
                                    <Setter Property="ToolTipService.ToolTip" Value="{Binding DisplayText, Mode=OneWay}"/>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
于 2011-04-25T13:34:19.073 に答える