Silverlight 4打印和元素可见性

Silverlight 4打印和元素可见性,silverlight,printing,visibility,Silverlight,Printing,Visibility,我正在从一个对话框(一个子窗口)打印两个完全相同的“标签”,但只希望在实际对话框上看到一个。听起来很简单,在XAML中编写代码并使包含第二个元素的元素的可见性最初折叠,然后在打印时将其设置为可见。但结果并不像预期的那样 如果我没有折叠第二个标签,使其在对话框中始终按预期打印,但当我隐藏第二个标签时,打印没有标签的两个副本;相反,第二个元素覆盖在第一个元素上,如下所示 这是我正在打印的XAML <Border x:Name="PrintRange" BorderBrush="#000000

我正在从一个对话框(一个子窗口)打印两个完全相同的“标签”,但只希望在实际对话框上看到一个。听起来很简单,在XAML中编写代码并使包含第二个元素的元素的可见性最初折叠,然后在打印时将其设置为可见。但结果并不像预期的那样

如果我没有折叠第二个标签,使其在对话框中始终按预期打印,但当我隐藏第二个标签时,打印没有标签的两个副本;相反,第二个元素覆盖在第一个元素上,如下所示

这是我正在打印的XAML

<Border x:Name="PrintRange" BorderBrush="#00000000" BorderThickness="20">
    <StackPanel Orientation="Vertical">
        <Border x:Name="FirstCopy" BorderBrush="Black" BorderThickness="1" Background="White" CornerRadius="5">
            <Grid Margin="10">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Image Source="/MiX.DLD.Web.UI.Silverlight;component/Images/VdoLogo.png" Width="80" HorizontalAlignment="Left" 
                         VerticalAlignment="Top" Grid.Row="0" />
                <TextBlock Text="DLD" FontSize="20" FontWeight="Bold" HorizontalAlignment="Right" VerticalAlignment="Top" 
                                 Grid.Row="0" Grid.Column="1" />
                <TextBlock Text="IMPORTANT NUMBERS" FontSize="14" FontWeight="Bold" Margin="0,5,0,5" 
                                 Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" />
                <TextBlock Text="IMEI NUMBER" FontSize="12" Grid.Row="2" />
                <TextBlock Text="{Binding ImeiNumber,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="2" Grid.Column="1" />
                <TextBlock Text="SERIAL NUMBER" FontSize="12" Grid.Row="3" />
                <TextBlock Text="{Binding SerialNumber,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="3" Grid.Column="1" />
                <TextBlock Text="REGISTRATION CODE" FontSize="12" Grid.Row="4" />
                <TextBlock Text="{Binding RegistrationCode,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="4" Grid.Column="1" />
            </Grid>
        </Border>

        <Border x:Name="SecondCopy" BorderBrush="Black" BorderThickness="1" Background="White" CornerRadius="5" 
                        Visibility="Collapsed" Margin="0,20,0,0">
            <Grid Margin="10">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Image Source="/MiX.DLD.Web.UI.Silverlight;component/Images/VdoLogo.png" Width="80" HorizontalAlignment="Left" 
                         VerticalAlignment="Top" Grid.Row="0" />
                <TextBlock Text="DLD" FontSize="20" FontWeight="Bold" HorizontalAlignment="Right" VerticalAlignment="Top" 
                                 Grid.Row="0" Grid.Column="1" />
                <TextBlock Text="IMPORTANT NUMBERS" FontSize="14" FontWeight="Bold" Margin="0,5,0,5" 
                                 Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" />
                <TextBlock Text="IMEI NUMBER" FontSize="12" Grid.Row="2" />
                <TextBlock Text="{Binding ImeiNumber,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="2" Grid.Column="1" />
                <TextBlock Text="SERIAL NUMBER" FontSize="12" Grid.Row="3" />
                <TextBlock Text="{Binding SerialNumber,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="3" Grid.Column="1" />
                <TextBlock Text="REGISTRATION CODE" FontSize="12" Grid.Row="4" />
                <TextBlock Text="{Binding RegistrationCode,Mode=OneWay}" FontSize="12" FontWeight="Bold" Margin="10,0,0,0" Grid.Row="4" Grid.Column="1" />
            </Grid>
        </Border>
    </StackPanel>
</Border>
我可以通过将SecondCopy.Visibility的设置移出PrintPage事件处理程序并将其置于pd.Print()调用之上来解决这个问题,但这会在对话框关闭之前明显地更新屏幕,看起来很混乱,所以我不希望这样做

关于如何解决这个问题有什么建议吗

private void OnPrintButtonClicked(object sender, RoutedEventArgs e)
{
  var pd = new PrintDocument();
  pd.PrintPage += (s, args) =>
                    {
                      SecondCopy.Visibility = Visibility.Visible;
                      args.PageVisual = PrintRange;
                    };
  pd.EndPrint += (s, args) => { SecondCopy.Visibility = Visibility.Collapsed; };
  pd.Print("MiX DLD pre-registration label");

  this.DialogResult = true;
}