動態地將DataTrigger添加到現有元素時遇到問題。'靜態資源MyTemplate'不是Setter上'System.Windows.Controls.Control.Template'屬性的有效值
如果MainWindow.XAML這樣我硬編碼,它工作正常:
在App.xaml中:
...
<Application.Resources>
<ControlTemplate x:Key="MyTemplate">
<TextBox AcceptsReturn="True" AcceptsTab="True" AllowDrop="True" Text="{Binding Content}"/>
</ControlTemplate>
</Application.Resources>
...
在MainWindow.XAML:
...
<DataTemplate>
<Control x:Name="ViewPlaceHolder" Template="{StaticResource ViewPlaceHolderTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding TypeName}" Value="MyViewModelName">
<Setter TargetName="ViewPlaceHolder" Property="Template" Value="{StaticResource MyTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
...
但如果我在後面的代碼中創建DataTrigger如下:
...
DataTrigger tr = new DataTrigger();
Binding b = new Binding();
b.Path = new PropertyPath("TypeName");
tr.Value = triggerValue;
tr.Binding = b;
Setter st = new Setter(Control.TemplateProperty, "{StaticResource MyTemplate}");
st.TargetName = "ViewPlaceHolder";
tr.Setters.Add(st);
myDataTemplate.Triggers.Add(tr);
...
我結合過程中得到以下錯誤(沒有錯誤,當我觸發添加到模板,並使用XamlWriter.Write(myDataTemplate)顯示其被添加到的DataTemplate正確):
「靜態資源MyTemplate的」對於Setter上的 'System.Windows.Controls.Control.Template'屬性不是有效值。
我必須在運行時加載觸發器,因爲它(triggerValue)來自動態加載的插件。如果我將ControlTemplate直接添加到Setter而不是將其引用爲StaticResource,它也可以正常工作,但我不喜歡在每個需要它的頁面/窗口中加載相同的ControlTemplate的想法。
任何想法如何我可以讓DataTrigger中的Setter引用資源,如果我從代碼後面添加它?
非常好,謝謝:) –
@DanieBrink完全沒有問題,樂意提供幫助。如果這能解決您的問題,您是否將此標記爲答案? – Dutts