Я печатаю две одинаковые "метки" из диалогового окна (ChildWindow), но хочу, чтобы в реальном диалоге была видна только одна.Звучит достаточно просто, кодируйте оба кода в 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>
и здесьэто метод, в котором я выполняю печать
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;
}
Я могу решить эту проблему, переместив настройку SecondCopy.Visibility из обработчика события PrintPage и поместив его над вызовом pd.Print (), но этозаметно обновляет экран до того, как диалоговое окно закрывается и выглядит грязно, поэтому я бы предпочел не делать этого таким образом.
Есть предложения о том, как можно решить эту проблему?