各ItemsPresenterのマージンを各側で-100と設定すると、いくつかの点で動作しますが、動作は奇妙で予測不可能で、ウィンドウの幅にもよります。他にどんな解決策がありますか?
あなたはそのItemsPresenter
のMargin
の設定について正しいですが、私は-100の値が、ここで問題を解決できないと思うし、それがFilpView
の幅ではなく、ウィンドウの幅に依存する必要があります。
<ItemsPresenter Margin="{Binding Width, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource marginvct}}" />
そして、私のコンバータは、このようなものです::ここで私もMargin
プロパティを設定するソリューションを持っているあなたは、このコードから見ることができるように
public class MarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var width = (double)value;
double itemmargin = width/6;
Thickness margin = new Thickness(itemmargin, 0, itemmargin, 0);
return margin;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
、私は2 /に各項目の幅を設定しました3全体のFlipView
の幅のうち、左と右の辺にはFlipView
の幅の1/6のスペースがあるので、次の現在の要素と前の要素が一緒に表示されます。
そして、私はWidth
にMargin
の値をバインドするので、今FlipView
を使用した場合、Width
プロパティを設定する必要があります。あなたは、私は、例えば、あなたがこのようにコーディングすることができますので、あなたは、あなたのFlipView
の幅、ウィンドウの幅と等しいたいと思い、それは、ウィンドウのサイズに依存言った:
CustomWidth
ための背後にあるコードは次のようである
<FlipView ItemsSource="{x:Bind collection}" Style="{StaticResource FlipViewStyle}" Width="{x:Bind CustomWidth}">
<FlipView.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.Background>
<ImageBrush ImageSource="{Binding ContactImage}" />
</Grid.Background>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse Width="200" Height="200">
<Ellipse.Fill>
<ImageBrush ImageSource="{Binding ContactImage}" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Margin="0,30,0,0" Text="{Binding ContactName}" FontSize="25" FontWeight="Bold" />
<TextBlock Margin="0,15,0,0" Text="{Binding ContactNumber}" FontSize="20" />
<TextBlock Margin="0,15,0,0" Text="{Binding ContactAddress}" FontSize="20" />
</StackPanel>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
:ここでは
private double CustomWidth;
public MainPage()
{
this.InitializeComponent();
CustomWidth = Window.Current.Bounds.Width;
}
は、このデモのレンダリング画像は、次のとおりです。
まだサイズ変更に妙に反応しているようだ:/私はページのSIZ上のウィンドウの幅にflipviewのサイズを設定していますeChangedイベント。私はまた、マージンが常に同じ幅ではないという振る舞いをします: – user2950509
@ user2950509、私はあなたの問題を再現できませんでした、私はここで余白で奇妙なものを見つけられませんでした。しかし、ページのSizeChangedイベントで幅をflipviewに設定する場合は、幅を変更するようにFlipViewに通知するためにINotifypropertyChangedを実装する必要があります。最初は幅に初期値を与えることも重要です。そうでなければエラーが発生します。最後の質問で私の答えをチェックしましたか? –
これは私が取得する動作です:http://imgur.com/vGEqdAo。あなたが見ることができるように、アイテムはまたocasionnaly消える。 – user2950509