我有一个绑定的TextBlock,XAML:
<TextBlock Text="{Binding MyText}"/>我知道如果绑定不可用,可以使用FallbackValue,但这是在运行时发生的吗?有没有办法在设计时显示默认值?如果我在设计窗口时能看到一个值,而不是一个空的TextBlock,那会让事情变得更容易。
谢谢
发布于 2013-06-25 21:45:05
您现在可以执行以下操作:
<TextBlock Text="{Binding MyText}" d:Text="Design time value"/>如果您想要一个不太冗长的Ian Bamforth's answer版本,您可以这样做
<TextBlock Text="{Binding MyText, FallbackValue=None}"/>发布于 2013-06-20 16:29:28
改编this问题中的一个例子。
这对我来说很有效--设计器中会显示文本"None“:
<TextBlock>
<TextBlock.Text>
<Binding ElementName="root" Path="blah" FallbackValue="None" />
</TextBlock.Text>
</TextBlock>希望这能有所帮助
发布于 2020-01-07 22:22:18
使用FallbackValue是错误的,因为它还会影响运行时行为(如果绑定无法从源获取值,则使用回退值)。
我想出了一个模仿Binding的自定义标记扩展(理想情况下,我更愿意从Binding继承,但ProvideValue方法不是虚拟的……):
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;
namespace MyNamespace
{
public class BindingEx : MarkupExtension
{
private readonly Binding _binding;
public BindingEx()
{
_binding = new Binding();
}
public BindingEx(string path)
{
_binding = new Binding(path);
}
public PropertyPath Path
{
get => _binding.Path;
set => _binding.Path = value;
}
public BindingMode Mode
{
get => _binding.Mode;
set => _binding.Mode = value;
}
public RelativeSource RelativeSource
{
get => _binding.RelativeSource;
set => _binding.RelativeSource = value;
}
public string ElementName
{
get => _binding.ElementName;
set => _binding.ElementName = value;
}
public IValueConverter Converter
{
get => _binding.Converter;
set => _binding.Converter = value;
}
public object DesignValue { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
if (target.TargetObject is DependencyObject d && DesignerProperties.GetIsInDesignMode(d))
return DesignValue;
return _binding.ProvideValue(serviceProvider);
}
}
}通过添加DesignValue属性,您可以像使用Binding一样使用它:
<TextBlock Text="{my:BindingEx Name, DesignValue=John Doe}" />请注意,BindingEx没有Binding的所有属性,但如果需要,您可以很容易地添加它们。
https://stackoverflow.com/questions/17208665
复制相似问题