どのように操作する細胞のデータが表示されるコンポーネントのラインナップツールキット開発を維持-管理を行?
-
11-09-2019 - |
質問
以下のコンポーネントのラインナップコードの内容を表示名は、ZipCodeの コンポーネントのラインナップツールキット開発を維持-管理.
しかし、私はしたくないデータを表示すだけではありませんが、 若干の変更, などいいかもしれませんねを表示すべてのzipcodesで表示す"-0000"は、か、もしく表示したい"n/a"細胞のそばにある空白にします。
私見つけることができずに CopyingCellClipboardContent るように見えませんかってきた。
思いが必要な場合、あるいは コンバータ がないといけないとだめになったことはあります。
たいのですが操作する細胞のコンテンツの開発を維持-管理細胞でのランタイム?
ー:
<Window x:Class="TestControl3423.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window2" Height="300" Width="500">
<StackPanel>
<tk:DataGrid x:Name="dataGrid"
Margin="0 0 0 10"
AutoGenerateColumns="False"
CanUserAddRows="False"
HeadersVisibility="Column"
MaxHeight="400"
IsReadOnly="True"
Background="#fff"
ColumnWidth="SizeToHeader">
</tk:DataGrid>
</StackPanel>
</Window>
コード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using Microsoft.Windows.Controls;
namespace TestControl3423
{
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
dataGrid.ItemsSource = Customer.GetCustomers();
dataGrid.Columns.Clear();
DataGridTextColumn dgtc1 = new DataGridTextColumn();
dgtc1.Header = "First Name";
dgtc1.Binding = new Binding("FirstName");
dgtc1.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
dataGrid.Columns.Add(dgtc1);
DataGridTextColumn dgtc2 = new DataGridTextColumn();
dgtc2.Header = "Zip Code";
dgtc2.Binding = new Binding("ZipCode");
dgtc2.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
dgtc2.CopyingCellClipboardContent += new EventHandler<DataGridCellClipboardEventArgs>(dgtc2_CopyingCellClipboardContent);
dataGrid.Columns.Add(dgtc2);
}
void dgtc2_CopyingCellClipboardContent(object sender, DataGridCellClipboardEventArgs e)
{
DataGridTextColumn dgtc = sender as DataGridTextColumn;
dgtc.SetValue(dgtc.GetValue() + "-0000"); //ERROR
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string Location { get; set; }
public string ZipCode { get; set; }
public static List<Customer> GetCustomers()
{
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { FirstName = "Jim", LastName = "Jones", ZipCode = "23434" });
customers.Add(new Customer { FirstName = "Joe", LastName = "Adams", ZipCode = "12312" });
customers.Add(new Customer { FirstName = "Jake", LastName = "Johnson", ZipCode = "23111" });
customers.Add(new Customer { FirstName = "Angie", LastName = "Reckar", ZipCode = "54343" });
customers.Add(new Customer { FirstName = "Jean", LastName = "Anderson", ZipCode = "16623" });
return customers;
}
}
}
解決
Plsはしばらく時間がかかる場合以下のコードが作します。私たDataGridTextColumn子孫のクラスオーバーライドGenerateElement方法です。ありきの操作をTextBlock制御され、指定された細胞。gその価値を追加桁郵便コードです。
...
DataGridTextColumn dgtc2 = new ExtendedDataGridTextColumn();
dgtc2.Header = "Zip Code";
...
public class ExtendedDataGridTextColumn : DataGridTextColumn
{
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
TextBlock element = (TextBlock)base.GenerateElement(cell, dataItem);
element.Text = ((Customer)dataItem).ZipCode + "-0000";
return element;
}
}
武器agiは、dexで下がらないboxerぐ, について
所属していません StackOverflow