2015-11-16 4 views
2

Я хочу создать какой-то инструмент для обрезки, такой как окна. У меня есть окно, которое покрывает экран полупрозрачным слоем. Пользователь может определить область скриншота, нарисуя мышь (он рисует прямоугольник, как в инструменте отрезки окон). Мой вопрос: как я могу сделать часть окна полностью прозрачной, чтобы пользователь мог четко видеть область снимка экрана?Сделать конкретную часть окна невидимой

Вот мой код до сих пор:

<Window x:Class="SnippingToolPro.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" 
    Width="525" 
    Height="350" 
    AllowsTransparency="True" 
    WindowStyle="None" 
    ResizeMode="NoResize" 
    WindowStartupLocation="CenterScreen" 
    WindowState="Maximized" 
    Opacity="0.5"> 
<Canvas> 

</Canvas> 

Любые предложения для получения "дыры" в середине?

+3

Как правило, инструменты для обрезки создают полноэкранное окно, которое отображает скриншот, а не фактический экран. Другими словами, они не работают с эффектами прозрачности. Это можно увидеть, когда вы воспроизводите видео и запускаете инструмент для съёмки. Вы увидите неподвижный кадр видео. –

+0

Вы правы! Хорошее предложение, но даже если я это сделаю, у меня такая же проблема, не так ли? – FKutsche

+1

Нет, нет. Вы просто показываете маску поверх скриншота. И в зависимости от прямоугольника эта маска меняется. –

ответ

1
<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     AllowsTransparency="True" 
     WindowStyle="None" 
     Background="Transparent"> 
    <Grid Background="Transparent"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="20"/> 
      <ColumnDefinition/> 
      <ColumnDefinition Width="20"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="20"/> 
      <RowDefinition/> 
      <RowDefinition Height="20"/> 
     </Grid.RowDefinitions> 
     <Rectangle Fill="Red" Grid.ColumnSpan="3"/> 
     <Rectangle Fill="Red" Grid.ColumnSpan="3" Grid.Row="2"/> 
     <Rectangle Fill="Red" Grid.Row="1"/> 
     <Rectangle Fill="Red" Grid.Row="1" Grid.Column="2"/> 
     <Rectangle Grid.Column="1" Grid.Row="1" Cursor="Wait" Fill="Black" Opacity=".01" IsHitTestVisible="True"/> 
    </Grid> 
</Window> 

Красные прямоугольники предназначены для демонстрации границ. Внутренний прямоугольник представляет область, в которой вы хотите выполнить свой выбор.

+0

Кажется лучшим решением для меня. Благодаря! – FKutsche

Смежные вопросы