我有一个静态只读变量,用于存储从运行时获取的文件路径。我想从这个静态只读变量加载spellcheck.customdictionaries uri,我该怎么办?我已经使它在xaml中指定文件的完整路径:
<TextBox Name="txtNote"
Grid.Column="0"
AcceptsReturn="True"
MaxLines="2"
VerticalScrollBarVisibility="Auto"
Text="{Binding Path=Note,
ElementName=ucNoteEditor}"
TextWrapping="WrapWithOverflow" SpellCheck.IsEnabled="True" >
<SpellCheck.CustomDictionaries>
<sys:Uri>m:\test.lex</sys:Uri>
</SpellCheck.CustomDictionaries>
</TextBox>
我想这样做,以便Uri在运行时从静态变量中获取它的值。我想在xaml上做,而不是从后面的代码。
答案 0 :(得分:0)
有x:Arguments
来指定构造函数参数,但我认为不适用(每this answer)。
从XAML执行此操作的最简单方法可能是编写Behavior<TextBox>
。这可以提供“Url”参数,以便您可以像这样使用它:
<TextBox ...>
<i:Interaction.Behaviors>
<local:CustomDictionaryBehavior Url="{StaticResource SomeKey}" />
</i:Interaction.Behaviors>
</TextBox>
当然,您可以通过使“Url”成为附加属性来进一步简化,该属性可以附加/分离行为,这样您就可以简单地编写:
<TextBox ... local:CustomDictionaryBehavior.Url="{StaticResource SomeKey}" />
行为代码应如下所示:
public class CustomDictionaryBehavior : Behavior<TextBox>
{
public static string GetUrl(DependencyObject obj)
{
return (string)obj.GetValue(UrlProperty);
}
public static void SetUrl(DependencyObject obj, string value)
{
obj.SetValue(UrlProperty, value);
}
public static readonly DependencyProperty UrlProperty =
DependencyProperty.RegisterAttached("Url", typeof(string), typeof(CustomDictionaryBehavior), new PropertyMetadata((sender, args) => {
Interaction.GetBehaviors(sender).Add(new CustomDictionaryBehavior());
}));
protected override void OnAttached()
{
string url = GetUrl(AssociatedObject);
AssociatedObject.CustomDictionaries.Add(new Uri(url));
}
}