Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从容器中删除usercontrol后重新呈现它_C#_Wpf_User Controls_Render_Measure - Fatal编程技术网

C# 从容器中删除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"

我有这样显示的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">
        // 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>