如果我将该 ItemsPresenter 的边距设置为每边的 -100,它在某些时候可以工作,但行为是奇怪的、不可预测的,并且取决于窗口的宽度。还有什么其他的解决方案?
您设置 theMargin
是对的ItemsPresenter
,但我认为 -100 的值不能解决这里的问题,它应该取决于FilpView
的宽度,而不是窗口的宽度。在这里,我还有一个解决方案还设置了Margin
属性:
<ItemsPresenter Margin="{Binding Width, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource marginvct}}" />
我的转换器是这样的:
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
并保持左右两侧有1/6 FlipView
宽度的空间,下一个也是,当前和以前的元素一起显示。
而且由于我绑定了Margin
to的值,所以现在Width
使用时,应该设置属性。你说这取决于窗口的大小,我想你希望你的宽度等于窗口的宽度,所以例如你可以这样编码:FlipView
Width
FlipView
<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>
后面的代码CustomWidth
是这样的:
private double CustomWidth;
public MainPage()
{
this.InitializeComponent();
CustomWidth = Window.Current.Bounds.Width;
}
这是此演示的渲染图像: