Erstellen DataTemplate und DataTrigger in den code
Ich versuche zu schaffen, DataTemplate im code-behind. Und ich habe ein problem mit DataTrigger in es.
Hier ist DataTemplate wie geschrieben in xaml:
<DataTemplate x:Key="XamlTemplate" >
<TextBox Text="{Binding Name}" Name="element" Width="100"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Flag}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="element" Storyboard.TargetProperty="Width"
To="200" Duration="0:0:2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
und hier ist das, was ich geschrieben habe in c#
var template = new DataTemplate();
//create visual tree
var textFactory = new FrameworkElementFactory(typeof(TextBox));
textFactory.SetBinding(TextBox.TextProperty, new Binding("Name"));
textFactory.SetValue(TextBox.NameProperty, "element");
textFactory.SetValue(TextBox.WidthProperty, 100D);
template.VisualTree = textFactory;
//create trigger
var animation = new DoubleAnimation();
animation.To = 200;
animation.Duration = TimeSpan.FromSeconds(2);
Storyboard.SetTargetProperty(animation, new PropertyPath("Width"));
Storyboard.SetTargetName(animation, "element");
var storyboard = new Storyboard();
storyboard.Children.Add(animation);
var action = new BeginStoryboard();
action.Storyboard = storyboard;
var trigger = new DataTrigger();
trigger.Binding = new Binding("Flag");
trigger.Value = true;
trigger.EnterActions.Add(action);
template.Triggers.Add(trigger);
Einen Satz dieser Daten als Vorlage ContentTemplate eine Schaltfläche. Taste ist-Daten gebunden, einfach Klasse, das ist kein problem.
Das problem ist, dass wenn ich die data-template erstellt, im code dann, wenn Flag
Eigenschaft geändert hat, bekomme ich die folgende exception
'element' name cannot be found in the name scope of 'System.Windows.DataTemplate'
. Während die Vorlage geschrieben, in xaml funktioniert perfekt.
Also, wo war ich nicht übersetzen von xaml-Code in c#?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Name
von Elementen ist ein bisschen ein Sonderfall (siehe Anmerkungen hier zum Beispiel).Sie möchten, legen Sie die Zeile
Und legen Sie die
FrameworkElementFactory.Name
statt:Dies ist, weil, wenn die Eigenschaft festgelegt ist, nach der Schöpfung (das ist, was du getan hast) ist es nicht mehr registriert, in der gleichen Weise.