私のコンバーターを使用すると、「入力文字列が正しい形式ではありませんでした」というメッセージとともに「FormatException」がスローされます。トラブルシューティングのヒントには、「文字列を DateTime に変換するときは、文字列を解析して日付を取得してから、各変数を DateTime オブジェクトに入れる」と書かれています。そのヒントはいつも出てきますか?私はコンバーターで DateTime オブジェクトを使用していないため、MainWindow の他の場所で使用されています。
MainWindow に UserControl があります。
<local:dCB_Props x:Name="cbTags" Height="23" VerticalAlignment="Top" AddClick="cbTags_AddClick" EditClick="cbTags_EditClick" />
動的にアイテムを追加します。そのタイプは、EditDeleteItem と呼ばれる別の UserControl です。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を返していたことに言及する必要がありますが、最後の手段として、他のことを試した後、文字列を返そうとしましたが、この質問を書くときに元に戻すのを忘れていました.
更新 2:
スタック トレース:
System.Text.StringBuilder.AppendFormat (IFormatProvider プロバイダー、文字列形式、Object[] 引数) で System.String.Format (IFormatProvider プロバイダー、文字列形式、Object[] 引数) で System.Diagnostics.TraceListener.TraceEvent (TraceEventCache eventCache、 System.Diagnostics.TraceSource.TraceEvent の文字列ソース、TraceEventType eventType、Int32 id、文字列形式、Object[] 引数) (MS.Internal.AvTrace.Trace(TraceEventType) の System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType、Int32 id、文字列形式、Object[] 引数) System.Windows.Data.BindingExpression.UpdateSource( の MS.Internal.TraceData.Trace(TraceEventType 型、AvTraceDetails traceDetails、オブジェクト p1、オブジェクト p2) の型、Int32 eventId、文字列メッセージ、文字列 [] ラベル、オブジェクト [] パラメーター) System.Windows.Data.BindingExpressionBase.UpdateValue() のオブジェクト値)。Windows.Data.BindingExpression.SetValue(DependencyObject d, DependencyProperty dp, Object value) で System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, OperationType operationType, Boolean isInternal) at System.Windows.DependencyObject .SetValue(DependencyProperty dp, Object value) at System.Windows.Controls.Primitives.ToggleButton.set_IsChecked(Nullable`1 value) at System.Windows.Controls.Primitives.ToggleButton.OnToggle() at System.Windows.Controls.Primitives. System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonDown(MouseButtonEventArgs e) の ToggleButton.OnClick() System.Windows.RoutedEventArgs.InvokeHandler (デリゲート ハンドラー、オブジェクト ターゲット) の System.Windows.EventRoute。System.Windows.UIElement.ReRaiseEventAs(DependencyObject 送信者、RoutedEventArgs args、RoutedEvent newEvent) の InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) .InvokeHandler(デリゲート ハンドラー、オブジェクト ターゲット) で System.Windows.EventRoute.InvokeHandlersImpl(オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) で System.Windows.UIElement.RaiseEventImpl(DependencyObject センダー、RoutedEventArgs args) で System.Windows.UIElement.RaiseEvent System.Windows.Input.InputManager.ProcessStagingArea() で (RoutedEventArgs args、Boolean trusted)System.Windows.UIElement.OnMouseDownThunk (オブジェクト センダー、MouseButtonEventArgs e) の System.Windows.RoutedEventArgs.InvokeHandler (デリゲート ハンドラー、オブジェクト ターゲット) の System.Windows.EventRoute.InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args System.Windows.UIElement.RaiseEventImpl(DependencyObject 送信者、RoutedEventArgs args) で System.Windows.UIElement.RaiseEvent(RoutedEventArgs args、Boolean trusted) で System.Windows.Input.InputManager.ProcessStagingArea() で Boolean reRaised)System.Windows.UIElement.OnMouseDownThunk (オブジェクト センダー、MouseButtonEventArgs e) の System.Windows.RoutedEventArgs.InvokeHandler (デリゲート ハンドラー、オブジェクト ターゲット) の System.Windows.EventRoute.InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args System.Windows.UIElement.RaiseEventImpl(DependencyObject 送信者、RoutedEventArgs args) で System.Windows.UIElement.RaiseEvent(RoutedEventArgs args、Boolean trusted) で System.Windows.Input.InputManager.ProcessStagingArea() で Boolean reRaised)System.Windows.UIElement.RaiseEventImpl(DependencyObject 送信者、RoutedEventArgs args) の InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) System.Windows.UIElement.RaiseEvent (RoutedEventArgs args、Boolean trusted) の System.Windows.Input.InputManager。 ProcessStagingArea()System.Windows.UIElement.RaiseEventImpl(DependencyObject 送信者、RoutedEventArgs args) の InvokeHandlersImpl (オブジェクト ソース、RoutedEventArgs args、Boolean reRaised) System.Windows.UIElement.RaiseEvent (RoutedEventArgs args、Boolean trusted) の System.Windows.Input.InputManager。 ProcessStagingArea()
解決
問題が見つかりました。リソース ディクショナリでは、コンバーターのキーは DataTemplate の上にある必要があります。配置に関係なく機能すると思いました。