0

全て、

これは簡単だと確信していますが、私はまだこれをやろうとしています。コード ビハインドでスクロールビューアーの ViewPortHeight を取得し、読み込まれたイベントとサイズが変更されたイベントにプラグインして、ViewPortHeight に関連するオブジェクトを管理できますが、CodeBehind にまったく移動せずにこれを行う簡単な方法があるかどうか疑問に思っていました。

つまり、どうにかして XAML で ViewPortHeight (および ViewPortWidth) を取得し、それらを別の要素の size プロパティまたは ViewModel (もちろん、独自の IValueconverter を使用) に直接バインドします。このようにして、ウィンドウのサイズが変更されるたびに (またはスケール変換が行われるたびに)、関連するコントロールをより簡単に管理できるようにしたいと考えています。

つまり、疑似コードでは、これが私が達成したいことです(コードビハインドなし)

(MyConverter がリソースの IValueConverter であると仮定します)

<ScrollViewer Name="MyScrollViewer">
    <loc:MyControl Width="{Binding Path=ViewPortWidth, ElementName=MyScrollViewer, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource MyConverter}, ConverterParameter=10}" />
</ScrollViewer>

前もって感謝します。

4

2 に答える 2

0

「ViewportWidth に関連するオブジェクトを管理するには」 - 行と列を作成できる Grid などのレイアウト コンテナーが必要なように思えます。それらの内部には、任意の UIElement を配置できます。また、セルに固定サイズを指定したり、使用可能なスペースに基づいて相対値を使用したりすることもできます。

ViewportWidth を把握したい場合は、これを行う必要があります。

<ScrollViewer Name="MyScrollViewer">
    <StackPanel>
     <Button Width="100"/>
     <Button Width="200"/>
     <Button Width="300"/>
     <Button Width="400"/>
    </StackPanel>
</ScrollViewer>
<TextBlock Text={Binding ElementName=MyScrollViewer, Path=ViewportWidth}"/>

ScollViewer には ViewportWidth というプロパティがあります。http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspxを参照してください。

于 2013-04-10T22:01:42.647 に答える