使用我的转换器抛出'FormatException',并显示消息'输入字符串格式不正确'。在故障排除提示中,它显示“将字符串转换为DateTime时,解析字符串以在将每个变量放入DateTime对象之前获取日期”。这个小费总是会出现吗?因为我没有在转换器中使用DateTime对象,尽管它在MainWindow的其他地方使用。
我的MainWindow中有一个UserControl:
<local:dCB_Props x:Name="cbTags" Height="23" VerticalAlignment="Top" AddClick="cbTags_AddClick" EditClick="cbTags_EditClick" />
我动态地向其添加项目,其类型是另一个UserControl,称为EditDeleteItem。我将它的DataTemplate设置为下面的那个:
<DataTemplate x:Shared="false" x:Key="TagTemplate">
<StackPanel>
<TextBlock Text="{Binding Path=Label, Mode=TwoWay}"/>
<CheckBox Style="{DynamicResource DaisyCheckBox}" HorizontalAlignment="Left" Content="Isolated">
<CheckBox.IsChecked>
<Binding Path="TagSearchOptions.TagPosition" Converter="{StaticResource TagPosConverter}"/>
</CheckBox.IsChecked>
</CheckBox>
<CheckBox Style="{DynamicResource DaisyCheckBox}" HorizontalAlignment="Left" Content="Match Case" />
<CheckBox Style="{DynamicResource DaisyCheckBox}" HorizontalAlignment="Left" Content="Include" />
</StackPanel>
</DataTemplate>
我的转换器是:
public class TPositionToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value!=null)
{
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return TagPosition.Anywhere;
}
}
以下是资源字典中的密钥
<local:TPositionToBoolConverter x:Key="TagPosConverter"/>
我会在转换器正常工作时更改代码。我应该提一下,如果我删除转换器,它不会抛出异常。
提前致谢。
我更改了Convert
方法的代码,现在返回false
而不是"false"
。我应该提一下我先退回一个bool,但作为最后的手段,在尝试其他事情后,我试图返回一个字符串,但在写这个问题时忘了改回来。
堆栈跟踪:
在System.Text.StringBuilder.AppendFormat(IFormatProvider提供程序, 字符串格式,Object [] args)at System.String.Format(IFormatProvider提供程序,String格式,Object [] args)at System.Diagnostics.TraceListener.TraceEvent(TraceEventCache eventCache,String source,TraceEventType eventType,Int32 id,String format,Object [] args)at System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType, Int32 id,String format,Object [] args)at MS.Internal.AvTrace.Trace(TraceEventType类型,Int32 eventId,String message,String [] labels,Object []参数)at MS.Internal.TraceData.Trace(TraceEventType类型,AvTraceDetails traceDetails,Object p1,Object p2)at System.Windows.Data.BindingExpression.UpdateSource(Object value)at System.Windows.Data.BindingExpressionBase.UpdateValue()at System.Windows.Data.BindingExpression.SetValue(DependencyObject d, DependencyProperty dp,Object value)at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, 对象值,PropertyMetadata元数据,布尔值 coerceWithDeferredReference,OperationType operationType,Boolean isInternal)at System.Windows.DependencyObject.SetValue(DependencyProperty dp,Object 价值) System.Windows.Controls.Primitives.ToggleButton.set_IsChecked(Nullable`1 价值) System.Windows.Controls.Primitives.ToggleButton.OnToggle()at System.Windows.Controls.Primitives.ToggleButton.OnClick()at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonDown(MouseButtonEventArgs e)在System.Windows.RoutedEventArgs.InvokeHandler(Delegate 处理程序,对象目标)at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args,Boolean reRaised)at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args,RoutedEvent newEvent)at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)at System.Windows.RoutedEventArgs.InvokeHandler(委托处理程序,对象 目标)在System.Windows.EventRoute.InvokeHandlersImpl(Object source,RoutedEventArgs args,Boolean reRaised)at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args,Boolean 在System.Windows.Input.InputManager.ProcessStagingArea()
中受信任
我发现了问题。在资源字典中,转换器的密钥应该高于DataTemplate。我认为无论其位置如何,它都会起作用。
答案 0 :(得分:1)
您的转换器应返回布尔值,而不是字符串。
答案 1 :(得分:0)
您是否尝试过返回布尔对象而不是字符串表示形式?
public class TPositionToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value!=null)
{
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return TagPosition.Anywhere;
}
}
答案 2 :(得分:0)
ToggleButton.IsChecked Property等待转换器中的Nullable<bool>
/ bool?
。
答案 3 :(得分:0)
拼写出来
if(value!=null) return true; else return false;