我正试图第一次绑定我的C#代码,以确定xaml将在自定义文本框中创建文本的颜色。
我的C#代码:
public class Limits
{
public static bool fruitLimits(string textboxDec, ComboBox boxVariable)
{
if (string.IsNullorWhiteSpace(textboxDec)
{return false;}
else if (boxVariable.SelectedIndex == 1)
{
try
{ int apples = Convert.ToInt32(textboxDex);
if ( apples < 4 && apples != 0)
{return false;}
else if( apples > 50)
{return false;}
else
return true;
}
catch (FormatException fEx)
{return false;}
}
else
{
try
{ int oranges = Convert.ToInt32(textboxDec);
if (oranges < 1 && oranges != 0)
{
return false;}
else if (oranges > 100)
{return false;}
else
return true;
}
catch (FormatException fEx2)
{return false;}
}
}
所以现在我想将此方法绑定到XAML,因此当此方法返回true时,框中的文本为Black,当它返回false时,文本为红色。
<local:DigitBox x:Name="FruitNumber">
<local:DigitBox.Style>
<Style TargetType="local:DigitBox">
<Style.Triggers>
<DataTrigger
Binding="{Binding Limits.fruitLimits}" Value="False">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</local:DigitBox.Style>
</local:DigitBox>
因此没有找到错误,但我的自定义文本框不会改变颜色。我尝试直接在我的c#方法中设置我的颜色更改,这是有效的。但我正在努力保持我一直在阅读的内容,即保持xaml的视觉变化。这需要绑定,但我显然缺少/不理解一些关键的东西
答案 0 :(得分:1)
您的问题是您尝试绑定到Method而不是属性。 尝试这样的事情:
public static bool fruitLimits
{
get
{ /*your method code here*/ }
}
编辑: 无法将参数传递到属性中,因此如果您无法访问文本框的值,则可能必须编写一个转换器以获取这些值。这里有基础知识:link 您可以传递一个对象作为值,另一个传递作为参数。 转换器然后处理信息并返回bool。 这里有一个关于这个转换器绑定的示例:
这是一个例子,你的绑定应该是这样的:
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource converterKey}">
<Binding ElementName="boxVariable" />
<Binding ElementName="textboxDec" Path="Text" />
</MultiBinding>
</DataTrigger.Binding>
替换&#34; ElementName = boxVariable&#34;和&#34; ElementName = textboxDec&#34;使用您想要传递的控件的名称。您可能需要添加&#34; Path = Text&#34;在文本框绑定。
然后在IMultiValueConverter中执行以下操作:
public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value[0].GetType().Equals(typeof(ComboBox)) && value[1].GetType().Equals(typeof(String)))
{
ComboBox boxVariable = value[0] as ComboBox;
string textboxDec = value[1] as String;
/* your method code here, returns Boolean */
}
}