none
wpf的問題 RRS feed

  • 问题

  • 1. WPF datagrid header換行處理方式,header中如何控制文字換行?有幾種辦法?

    2.列印 with FlowDocument Print (1. Form Print 2. preview),如何直接打印當前畫面并提供預覽(當前畫面可能有datagrid,要全部顯示)

    3.如何在可編輯操作介面直接實作出不可異動的UI,如新增介面實作為唯讀UI。(如用disable作法, 請考慮不影響使用者瀏覽的清晰度),是否可直接控制介面的所有控件?

    4.如何利用datagrid實作表格之新增/修改/刪除功能於同一介面中



     

    2010年12月1日 1:56

答案

  • 你好,

    第一個問題:你可以通過修改DataGrid的ColumnHeader 的Template來實現,具體是;

    <DataGrid.Columns>
      <DataGridTextColumn Header="..." Binding="{Binding ...}" Width="*">
        <DataGridTextColumn.HeaderTemplate>
          <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="...."/>
          </DataTemplate>
        </DataGridTextColumn.HeaderTemplate>
      </DataGridTextColumn>
    </DataGrid.Columns>
    

    还有很多种方法,比如实用一个WarpPanel在ColumnHeader,或者放一个自己Grid布局在里面,设置下行数等来控制。

     

    第二个问题:这个问题,你可以先通过 RenderTargetBitmap class 来捕获一个当前界面的图片表达,然后提供给用户一个预览,最后你可以通过PrintDialog.PrintVisual() 方法输出打印。

    下面的代码是可以让你来输出一个当前Visual对象成图片的,应该对你有用:

      private void save_Click(object sender, RoutedEventArgs e)
      {
       SaveFileDialog sfd = new SaveFileDialog();
       sfd.Filter = "Png Files(*.png)|*.png";
    
       Nullable<bool> result = sfd.ShowDialog();
       string fileName = "";
    
       if (result == true)
       {
        fileName = sfd.FileName;
        Size size = inkCanvas.RenderSize;
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32);
        rtb.Render(inkCanvas);
        PngBitmapEncoder png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        using (Stream stm = File.Create(fileName))
        {
         png.Save(stm);
        }
       }
      }
    

     

    第三个问题:有两种方法,一个是设置最顶层控件的IsEnabled属性成False,还有一个是设置IsHitTest为False来阻止用户的鼠标单点测试,你可以试试

     

    第四个问题:这个在网路上有很多相关的例子,一般来说可以用关键词 "CRUD DataGrid WPF", 比如下面两篇文章:

    Sincerely,
    Bob Bao

    --------------------------------------------------------------
    This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Are you looking for a typical code sample? Please download All in One Code Framework !

    如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
    你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!
    2010年12月2日 12:36
    版主

全部回复

  • WPF datagrid header換行處理方式,header中如何控制文字換行?有幾種辦法?
    2010年12月2日 7:12
  • 你好,

    第一個問題:你可以通過修改DataGrid的ColumnHeader 的Template來實現,具體是;

    <DataGrid.Columns>
      <DataGridTextColumn Header="..." Binding="{Binding ...}" Width="*">
        <DataGridTextColumn.HeaderTemplate>
          <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="...."/>
          </DataTemplate>
        </DataGridTextColumn.HeaderTemplate>
      </DataGridTextColumn>
    </DataGrid.Columns>
    

    还有很多种方法,比如实用一个WarpPanel在ColumnHeader,或者放一个自己Grid布局在里面,设置下行数等来控制。

     

    第二个问题:这个问题,你可以先通过 RenderTargetBitmap class 来捕获一个当前界面的图片表达,然后提供给用户一个预览,最后你可以通过PrintDialog.PrintVisual() 方法输出打印。

    下面的代码是可以让你来输出一个当前Visual对象成图片的,应该对你有用:

      private void save_Click(object sender, RoutedEventArgs e)
      {
       SaveFileDialog sfd = new SaveFileDialog();
       sfd.Filter = "Png Files(*.png)|*.png";
    
       Nullable<bool> result = sfd.ShowDialog();
       string fileName = "";
    
       if (result == true)
       {
        fileName = sfd.FileName;
        Size size = inkCanvas.RenderSize;
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32);
        rtb.Render(inkCanvas);
        PngBitmapEncoder png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        using (Stream stm = File.Create(fileName))
        {
         png.Save(stm);
        }
       }
      }
    

     

    第三个问题:有两种方法,一个是设置最顶层控件的IsEnabled属性成False,还有一个是设置IsHitTest为False来阻止用户的鼠标单点测试,你可以试试

     

    第四个问题:这个在网路上有很多相关的例子,一般来说可以用关键词 "CRUD DataGrid WPF", 比如下面两篇文章:

    Sincerely,
    Bob Bao

    --------------------------------------------------------------
    This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Are you looking for a typical code sample? Please download All in One Code Framework !

    如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
    你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!
    2010年12月2日 12:36
    版主