none
WPF BindingのConverterをXAMLで記述したい RRS feed

  • 質問

  • IValueConverterの実験をするために、下に示すコードを書きました。コンパイルは通りますが、実行時に
    ''System.Windows.StaticResourceExtension' の値の指定時に例外がスローされました。' 行番号 '11'、行位置 '134'。 
    というエラーが出ます。この行番号、行位置には問題のある記述は無く、例外の発生箇所を正確に示しているとは思えません。

    Bindingの設定はコードビハインドでは成功しています。実験の目的はXAMLからBindingの設定を行うことであり、プログラムの内容も実用性の無いものです。(TextBox2.Textを0から100までのDouble型に変換してEllipseの透明度を変える )

    VS2010 ProfessionalとVS2015 Communityで実験しましたが、どちらも同じエラーが出ます。
    どうすれば正常に動作するのか、御教授をお願い致します。




    Class MainWindow

    End Class

    Public Class SampleConverter
        Implements IValueConverter

        Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
            Dim si As Double
            If Double.TryParse(value, si) Then
                If 0 <= si And si <= 100 Then
                    Return si
                End If
            End If
            Return 0

        End Function

        Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
             Return "0"

        End Function
    End Class

    ------XAML-----

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l='clr-namespace:WpfApplication1'
            
        Title="MainWindow" Height="350" Width="525">
        <Grid>
        
              <TextBox FontSize="16" Height="28" HorizontalAlignment="Left" Margin="286,48,0,0" Name="TextBox2" VerticalAlignment="Top" Width="78" Text="654654321"  />
           
            <Ellipse Fill="#FF101044" HorizontalAlignment="Left" Height="28" Margin="105,122,0,0" Stroke="Black" VerticalAlignment="Top" Width="128" Opacity="{Binding ElementName=TextBox2, Path=Text,Converter={StaticResource ResourceKey=a02}}"
     >
                
            </Ellipse>
     
            </Grid>
            

        <Window.Resources>
            <l:SampleConverter x:Key="a02"/>
        </Window.Resources>


    </Window>
    2016年6月29日 12:24

回答

  • こんにちは。

    Resource宣言をGridより上で行ってみてください。

    <Window x:Class="MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:l='clr-namespace:WpfApplication1'
         Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <l:SampleConverter x:Key="a02"/>
        </Window.Resources>
        <Grid>
            <TextBox FontSize="16" Height="28" HorizontalAlignment="Left" Margin="286,48,0,0" Name="TextBox2" VerticalAlignment="Top" Width="78" Text="654654321"  />
            <Ellipse Fill="#FF101044" HorizontalAlignment="Left" Height="28" Margin="105,122,0,0" Stroke="Black" VerticalAlignment="Top" Width="128" Opacity="{Binding ElementName=TextBox2, Path=Text,Converter={StaticResource ResourceKey=a02}}" >
            </Ellipse>
        </Grid>
    </Window>
    

    • 回答としてマーク huahi11112 2016年6月29日 13:05
    2016年6月29日 12:59
    モデレータ

すべての返信

  • こんにちは。

    Resource宣言をGridより上で行ってみてください。

    <Window x:Class="MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:l='clr-namespace:WpfApplication1'
         Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <l:SampleConverter x:Key="a02"/>
        </Window.Resources>
        <Grid>
            <TextBox FontSize="16" Height="28" HorizontalAlignment="Left" Margin="286,48,0,0" Name="TextBox2" VerticalAlignment="Top" Width="78" Text="654654321"  />
            <Ellipse Fill="#FF101044" HorizontalAlignment="Left" Height="28" Margin="105,122,0,0" Stroke="Black" VerticalAlignment="Top" Width="128" Opacity="{Binding ElementName=TextBox2, Path=Text,Converter={StaticResource ResourceKey=a02}}" >
            </Ellipse>
        </Grid>
    </Window>
    

    • 回答としてマーク huahi11112 2016年6月29日 13:05
    2016年6月29日 12:59
    モデレータ
  • お示しいただいた方法で動きました。

    こんな方法があるとは思っていませんでした。Tak1waさん、いつもお世話になります。今回も大変ありがとうございました!

    今までに、これができなくて(コンパイルが通るが意味不明な実行時エラーが出て)XAMLで書くのを諦め、長ったらしいコードビハインドを書いたプロジェクトがとても多くあるのです。明日からこれらをXAMLで書き換える作業に入ります。

    2016年6月29日 13:11