WPF常用技巧汇总 - Part 2

WPF常用技巧汇总-CSDN博客

主要用于记录工作中发现的一些问题和常见的解决方法。

目录

WPF常用技巧汇总-CSDN博客

[1. DataGrid Tooltip - Multiple](#1. DataGrid Tooltip - Multiple)

[2. DataGrid Tooltip - Cell值和ToolTip值一样](#2. DataGrid Tooltip - Cell值和ToolTip值一样)

[3. DataGrid Tooltip - Cell值和ToolTip值不一样](#3. DataGrid Tooltip - Cell值和ToolTip值不一样)

[4. DataGrid - Ctrl +A /Ctrl + C复制的内容不是Cell的值](#4. DataGrid - Ctrl +A /Ctrl + C复制的内容不是Cell的值)

[5. DataGrid - Edit -Combox](#5. DataGrid - Edit -Combox)

[6. DataGrid - 解决DataGridTemplateColumn无法排序的问题](#6. DataGrid - 解决DataGridTemplateColumn无法排序的问题)


1. DataGrid Tooltip - Multiple

XML 复制代码
 <DataGridTemplateColumn MinWidth="120" x:Name="colExclude">
     <DataGridTemplateColumn.HeaderTemplate>
         <DataTemplate>
             <Grid>
                 <Grid.RowDefinitions>
                     <RowDefinition Height="*"/>
                     <RowDefinition Height="*"/>
                 </Grid.RowDefinitions>
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="*"></ColumnDefinition>
                     <ColumnDefinition Width="*"></ColumnDefinition>
                     <ColumnDefinition Width="*"></ColumnDefinition>
                 </Grid.ColumnDefinitions>
                 <Label Style="{StaticResource LabelHeaderWhiteColorStyle}" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" Content="Exclude"/>
                 <Border Grid.Row="0" Grid.Column="2" Width="22" Margin="0,2" ToolTipService.ShowDuration="50000">
                     <Border.Background>
                         <ImageBrush ImageSource="..\..\..\Images\question_mark.png"/>
                     </Border.Background>
                     <Border.ToolTip>
                         <ToolTip>
                             <StackPanel>
                                 <Label Content="Tool Tip:" HorizontalAlignment="Center"/>
                                 <Label Content="Notice = Exclude Notice: Lender selected will not be available in the Notice Preview"/>
                                 <Label Content="JobTicket = Exclude Job Ticket: Lender selected will not be available in the Job Ticket Preview"/>
                                 <Label Content="Recon = Exclude Distribution: Lender selected will decrease the Total Cash Actual expected in Reconciliation"/>
                             </StackPanel>
                         </ToolTip>
                     </Border.ToolTip>
                 </Border>
                 <Label Style="{StaticResource LabelHeaderWhiteColorStyle}" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" Content="Notice"/>
                 <Label Style="{StaticResource LabelHeaderWhiteColorStyle}" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" Content="JobTicket"/>
                 <Label Style="{StaticResource LabelHeaderWhiteColorStyle}" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Content="Recon"/>
             </Grid>
         </DataTemplate>
     </DataGridTemplateColumn.HeaderTemplate>
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <Grid IsEnabled="{Binding DataContext.IsCashDistributeEnable, RelativeSource={RelativeSource AncestorType={x:Type bs:AgencyWindowBase}},Mode=OneWay}">
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="*"/>
                     <ColumnDefinition Width="*"/>
                     <ColumnDefinition Width="*"/>
                 </Grid.ColumnDefinitions>
                 <CheckBox Style="{StaticResource CheckBoxInCellStyle}" HorizontalAlignment="Left" Grid.Column="0" IsChecked="{Binding DataContext.ExcludeFromNotice, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},Mode=TwoWay}" IsThreeState="False" IsEnabled="{Binding DataContext.IsExcludeNoticeEnabled, RelativeSource={RelativeSource AncestorType={x:Type bs:AgencyWindowBase}},Mode=OneWay}"/>
                 <CheckBox Style="{StaticResource CheckBoxInCellStyle}" Grid.Column="1" IsChecked="{Binding DataContext.ExcludeFromJobTicket, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},Mode=TwoWay}" IsThreeState="False" IsEnabled="{Binding DataContext.IsExcludeJTAndReconEnable, RelativeSource={RelativeSource AncestorType={x:Type bs:AgencyWindowBase}},Mode=OneWay}" HorizontalAlignment="Center"/>
                 <CheckBox Style="{StaticResource CheckBoxInCellStyle}" HorizontalAlignment="Right" Grid.Column="2" IsChecked="{Binding DataContext.ExcludeFromRecon, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},Mode=TwoWay}" IsThreeState="False" IsEnabled="{Binding DataContext.IsExcludeJTAndReconEnable, RelativeSource={RelativeSource AncestorType={x:Type bs:AgencyWindowBase}},Mode=OneWay}"/>
             </Grid>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

2. DataGrid Tooltip - Cell值和ToolTip值一样

XML 复制代码
<DataGridTextColumn Header="Borrower Name" Binding="{Binding BorrowerName}" IsReadOnly="True" MinWidth="150" Width="150" MaxWidth="1000">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="ToolTip" Value="{Binding BorrowerName}"></Setter>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

3. DataGrid Tooltip - Cell值和ToolTip值不一样

XML 复制代码
<DataGridTextColumn Header="Borrower Name" Binding="{Binding BorrowerName}" IsReadOnly="True" MinWidth="150" Width="150" MaxWidth="1000">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="ToolTip" Value="{Binding BorrowerNameToolTip}"></Setter>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

4. DataGrid - Ctrl +A /Ctrl + C复制的内容不是Cell的值

默认copy的内容是Cell的value, 即Binding的field的value。

但是有时候我们想copy的是其他的field值,怎么办?

比如我们这个列显示的是一些内容的缩写,但是拷贝的时候需要拷贝全整的内容。

此时可以通过指定ClipboardContentBinding去解决此类问题。

XML 复制代码
 <DataGridTextColumn Header="Sending To" Binding="{Binding singleRecipient}" IsReadOnly="True" MinWidth="200" Width="240" ClipboardContentBinding="{Binding Recipients}">
     <DataGridTextColumn.CellStyle>
         <Style TargetType="DataGridCell">
             <Setter Property="ToolTip" Value="{Binding Recipients}"></Setter>
         </Style>
     </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>

5. DataGrid - Edit -Combox

XML 复制代码
 <DataGridTemplateColumn Width="180" IsReadOnly="False">
     <DataGridTemplateColumn.HeaderTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <TextBlock FontWeight="SemiBold" Text="Account Name "/>
                 <Image Source="..\..\..\Images\question_mark.png" Height="15" Width="15" HorizontalAlignment="Right" Grid.Column="1" 
    ToolTipService.ToolTip="Bla bla bla..." />
             </StackPanel>
         </DataTemplate>
     </DataGridTemplateColumn.HeaderTemplate>
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                 <Label ToolTip="{Binding  SelectedAccount.Name}" Content="{Binding SelectedAccount.Name}" 
                Visibility="{Binding Path=IsAccountEdit, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false}"></Label>
             </StackPanel>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
     <DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
             <ComboBox Visibility="{Binding Path=IsAccountEditShow, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false}" Width="170" SelectedValue="{Binding SelectedAccount, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}" x:Name="cbxSelectedAcount" SelectionChanged="cbxSelectedAcount_SelectionChanged"
   ItemsSource="{Binding Path=Accounts, UpdateSourceTrigger=PropertyChanged}"
   IsEnabled="{Binding DataContext.NoticeTemplate.Payment.IsTypeBorrowingOIDAndHasAgentAccountId, Converter={StaticResource InverseBooleanConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}">
                 <ComboBox.ItemTemplate>
                     <DataTemplate>
                         <TextBlock Text="{Binding Account.Name}" Foreground="Black"/>
                     </DataTemplate>
                 </ComboBox.ItemTemplate>
             </ComboBox>
         </DataTemplate>
     </DataGridTemplateColumn.CellEditingTemplate>
 </DataGridTemplateColumn>
XML 复制代码
      private void cbxSelectedAcount_SelectionChanged(object sender, SelectionChangedEventArgs e)
      {
          if (e.AddedItems.Count > 0)
          {
              var selectedAccount = e.AddedItems[0] as AccountDto;
          }
      }

6. DataGrid - 解决DataGridTemplateColumn无法排序的问题

DataGrid设置了CanUserSortColumns="True"后,DataGridTemplateColumn点击Header后无法支持排序。此时可通过指定CanUserSort="True" 和SortMemberPath="SelectedAccount.Name"解决。

XML 复制代码
      <DataGridTemplateColumn Width="180" IsReadOnly="False" CanUserSort="True" SortMemberPath="SelectedAccount.Name" >
          <DataGridTemplateColumn.HeaderTemplate>
              <DataTemplate>
                  <StackPanel Orientation="Horizontal">
                      <TextBlock FontWeight="SemiBold" Text="Account Name "/>
                      <Image Source="..\..\..\Images\question_mark.png" Height="15" Width="15" HorizontalAlignment="Right" Grid.Column="1" 
         ToolTipService.ToolTip="Wire Instructions of the selected Account will be used on the Notice.&#x0a;&#x0a;Accounts are setup at the Facility Level under the Lender's Admin Details.&#x0a;&#x0a;If an Account is unavailable:&#x0a;1) Check if its Currency matches the Payment Currency&#x0a;2) Check it's selected for ALL applicable Payment Types" />
                  </StackPanel>
              </DataTemplate>
          </DataGridTemplateColumn.HeaderTemplate>
          <DataGridTemplateColumn.CellTemplate>
              <DataTemplate>
                  <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                      <Label ToolTip="{Binding  SelectedAccount.Name}" Content="{Binding SelectedAccount.Name}" 
                     Visibility="{Binding Path=IsAccountEdit, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false}"></Label>
                  </StackPanel>
              </DataTemplate>
          </DataGridTemplateColumn.CellTemplate>
          <DataGridTemplateColumn.CellEditingTemplate>
              <DataTemplate>
                  <ComboBox Visibility="{Binding Path=IsAccountEditShow, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false}"  Width="170" SelectedValue="{Binding SelectedAccount, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}" x:Name="cbxSelectedAcountForLender" SelectionChanged="cbxSelectedAcountForLender_SelectionChanged"
        ItemsSource="{Binding Path=Accounts, UpdateSourceTrigger=PropertyChanged}"
        >
                      <ComboBox.ItemTemplate>
                          <DataTemplate>
                              <TextBlock Text="{Binding Account.Name}" Width="150" Foreground="Black"/>
                          </DataTemplate>
                      </ComboBox.ItemTemplate>
                  </ComboBox>
              </DataTemplate>
          </DataGridTemplateColumn.CellEditingTemplate>
      </DataGridTemplateColumn>
相关推荐
刘 大 望2 分钟前
Java写数据结构:队列
java·数据结构·intellij-idea
bing_1586 分钟前
Spring MVC @RequestParam 注解怎么用?如何处理可选参数和默认值?
java·spring·mvc·requestparam
Clf丶忆笙27 分钟前
Java IO流与NIO终极指南:从基础到高级应用
java·网络·nio
NON-JUDGMENTAL31 分钟前
Hadoop 集群基础指令指南
大数据·hadoop·分布式
code_shenbing41 分钟前
WPF实现类似Microsoft Visual Studio2022界面效果及动态生成界面技术
ui·c#·wpf·上位机
建群新人小猿44 分钟前
CRMEB-PRO系统定时任务扩展开发指南
android·java·开发语言·前端
长安城没有风1 小时前
JAVA SE 反射,枚举与lambda表达式
java·开发语言
百流1 小时前
ES使用之查询方式
android·大数据·elasticsearch
头顶秃成一缕光2 小时前
JVM快速入门
java·linux·jvm·ide·spring·spring cloud·servlet
琢磨先生David2 小时前
Java 未来技术栈:从云原生到 AI 融合的企业级技术演进路线
java·人工智能·云原生