C# 从容器中删除usercontrol后重新呈现它
我有这样显示的UserControl,用于在打印前预览收据票据:C# 从容器中删除usercontrol后重新呈现它,c#,wpf,user-controls,render,measure,C#,Wpf,User Controls,Render,Measure,我有这样显示的UserControl,用于在打印前预览收据票据: <ScrollViewer x:Name="xzScroll" Template="{StaticResource scrollView}" Height="488" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"> <Border x:Name="xzPreview" BorderThickness="0"
<ScrollViewer x:Name="xzScroll" Template="{StaticResource scrollView}" Height="488" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<Border x:Name="xzPreview" BorderThickness="0" Background="White" Margin="0,0,10,0" Padding="15">
// The UserControl
</Border>
</ScrollViewer>
但是,“高度”和“宽度”属性不会更改,从而导致打印错误,页边距混乱,侧面有一些文本剪辑
当我在代码中创建UserControl的新实例,然后使用Measure和Arrange方法时,我看到宽度和高度属性会根据PrinteAleareaWidth进行更改,从而生成正确的收据票据
如何确保正确设置了宽度和高度属性?是否要调整Usercontrol的大小 如果是,为什么不为Usercontrol创建一个具有两个属性Height和Width的类ViewModel,并将用户控件绑定到这些属性上呢。 您可以在不删除Usercontrol的情况下更改大小 这里举例说明这样的ViewModel的外观。您将需要实现INotifyPropertyChanged
public class UserControlViewModel:INotifyPropertyChanged
{
private double _height;
private double _width;
public double _height
{
get { return _height;}
set {
if(_height == value)
return;
_height = value;
OnPropertyChanged();
}
public double _width
{
get { return _width;}
set {
if(_width == value)
return;
_width = value;
OnPropertyChanged();
}
在Xaml中,您可以这样绑定它
<ScrollViewer x:Name="xzScroll" Template="{StaticResource scrollView}" Height="488" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<Border x:Name="xzPreview" BorderThickness="0" Background="White" Margin="0,0,10,0" Padding="15">
<MyUserControl
DataContext = "{Binding MyControlViewModelObject}"
Height = "{Binding Height}"
Width = "{Binding Width}"/>
</Border>
</ScrollViewer>
您可能已经在UserControl中声明了具有精确边距和/或高度和宽度维度的UI元素。。。当然,我不能肯定,因为你没有给我们看你的相关代码 但是,如果是这种情况,那么您将无法通过外部重新调整UserControl的大小来重新排列它们。解决方案是使用网格控件来组织UI元素,以便在调整UserControl的大小时可以自动调整它们的大小。有关更多信息,请参阅MSDN上的页面。My UserControl仅包含一些网格、ItemControls、TextBlock等,没有硬编码的边距或宽度/高度。这就是为什么它如此奇怪,因为如果我只在代码中渲染,而不在边框中放置我的UserControl,那么所有的东西都会得到很好的拉伸。有什么想法吗?你的ScrollViewer有一个精确的高度设置,这样可以阻止UserControl重新调整大小。我删除了所有可能的精确高度和边距。但不幸的是仍然没有运气:。我想我只需要打印实例后面的代码。
<ScrollViewer x:Name="xzScroll" Template="{StaticResource scrollView}" Height="488" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<Border x:Name="xzPreview" BorderThickness="0" Background="White" Margin="0,0,10,0" Padding="15">
<MyUserControl
DataContext = "{Binding MyControlViewModelObject}"
Height = "{Binding Height}"
Width = "{Binding Width}"/>
</Border>
</ScrollViewer>