XAMLを使用した宣言アプローチが廃止されていますが、これを行う必要がある場合があります。
XAMLを構築するには、FrameworkElementFactory
クラスをご覧ください。それはかなりきちんとしたパターンです。次のスニペットは、コード内でListViewのDataTemplateを作成した場所を示しています。私は時間報告アプリケーションのために月の日数に基づいて要素を動的に追加する必要がありました。
GridView gv = new GridView();
int i = 0;
foreach (string s in vm.DateList)
{
string column = string.Format("DisplayTime[{0}].Hours", i);
DataTemplate dt = new DataTemplate();
DateTime date = DateTime.Parse(s);
bool isWeekday = true;
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
{
isWeekday = false;
}
Binding binding = new Binding();
binding.Path = new PropertyPath(column);
binding.Mode = BindingMode.TwoWay;
FrameworkElementFactory gridElement = new FrameworkElementFactory(typeof(Grid));
gridElement.SetValue(Grid.WidthProperty, 60.0);
gridElement.SetValue(Grid.HeightProperty, 94.0);
gridElement.SetValue(Grid.MarginProperty, new Thickness(0.0, 0.0, 0.0, 4.0));
if (!isWeekday)
{
gridElement.SetValue(Grid.BackgroundProperty, new SolidColorBrush(Color.FromRgb(65, 65, 65)));
}
FrameworkElementFactory txtelement = new FrameworkElementFactory(typeof(TextBox));
txtelement.SetBinding(TextBox.TextProperty, binding);
txtelement.SetValue(TextBox.WidthProperty, 40.0);
txtelement.SetValue(TextBox.HeightProperty, 20.0);
txtelement.SetValue(TextBox.VerticalAlignmentProperty, VerticalAlignment.Center);
txtelement.SetValue(TextBox.HorizontalAlignmentProperty, HorizontalAlignment.Center);
txtelement.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Right);
gridElement.AppendChild(txtelement);
dt.VisualTree = gridElement;
gv.Columns.Add(new GridViewColumn()
{
Header = s,
// DisplayMemberBinding = new Binding(column),
CellTemplate = dt
});
i++;
}
ETCListView.View = gv;
私は、その本当に好ましくないアプローチを同意するが、残念ながらその私たちは(管理など見下ろす)FrameworkElementFactoryは一種のまさに私が何であったか、私は必要なもののために偉大に見えるこの現在のシナリオにして立ち往生していますフレームワークには希望があります。私はそれにバッシュを与え、それがどのように行くのかを見るでしょう、歓声! – Smallgods
これは素晴らしい作品で、私に必要なコントロールを与えてくれます。私がうまくいくことができない唯一のことは、どのプロパティが実際にCheckBoxの視覚的表現を制御するかです。私が読んだXAMLの例では、 "Path"要素にあります。しかし、私はFrameWorkElementFactoryからそれに到達する明確な方法を見出すことができません。カスタムテンプレートを設定するだけでは不十分です。これは私を正方形に戻します。任意のアイデア/誰もが前にこの問題に遭遇する? – Smallgods
私は、代わりにMouseOverイベントとOnClickイベントでImageを使用しました。その結果、必要な処理を実行するのに十分な動作が得られました。しかし、あなたのコードで行った実験では、うまくいきましたので、ありがとうございます。これが誰かを助けることを願っています。 – Smallgods