Хорошо, это работает, так что хороший ответ, но есть ли способ работать с кружком, а не с Path, потому что мне нужно изменить размер автоматически, а не Path Так что попробую другое решение ниже.

дал элемент управления UserControl, представляющий собой кольцо, наложив 2 круга, при этом маленький круг остается пустым, а второй - за наименьшим цветным.

В моем приложении WPF я хочу поместить несколько колец, но маленький круг скрывает другие кольца. Я бы хотел видеть сквозь него, а также захватить событие мыши для кольца за другими кольцами, иначе это не настоящие кольца. Является ли это возможным ?

Я пробовал OpacityMask для маленького эллипса, как указано ответом наhttp://social.msdn.microsoft.com/forums/en-US/wpf/thread/551201d1-c5b3-4e17-ae63-625cfbb8bcc4 но до сих пор не вижу кольца за дырой:

<UserControl x:Class="MyUserControls.MyRing"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="150" d:DesignWidth="150" SizeChanged="UserControl_SizeChanged">
    <Grid Height="150" Name="Grid" Width="150" MouseMove="ellipse1_MouseMove">
        <Ellipse Fill="Red" Height="150" Width="150" HorizontalAlignment="Left" Margin="0,0,0,0" Name="ellipse1" Stroke="Black" VerticalAlignment="Top"  >
            <Ellipse.OpacityMask>
                <RadialGradientBrush>
                    <GradientStop Color="#FFB94444" Offset="0.496"/>
                    <GradientStop Color="#00FFFFFF" Offset="0.491"/>
                </RadialGradientBrush>
            </Ellipse.OpacityMask>
        </Ellipse>
        <Ellipse Fill="White" Height="100" Width="100" Margin="25,25,25,0" Name="ellipse2" Stroke="Black" VerticalAlignment="Top" />       
    </Grid>
</UserControl>

Ответы на вопрос(2)

Решение Вопроса

вы уже нашли свой ответ (несколько лет назад), но для всех, кто хочет это сделать, вы можете проверить CompositeGeometry:

http://msdn.microsoft.com/en-us/library/ms751808.aspx#combindgeometriessection

Такие как:

<Path Fill="Red" Stroke="Black">
    <Path.Data>
        <CombinedGeometry GeometryCombineMode="Xor">
            <CombinedGeometry.Geometry1>
                <EllipseGeometry RadiusX="75" RadiusY="75" Center="75,75" />
            </CombinedGeometry.Geometry1>
            <CombinedGeometry.Geometry2>
                <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
            </CombinedGeometry.Geometry2>
        </CombinedGeometry>
    </Path.Data>
</Path>

затемIsHitTestVisible="False" должны предотвращать помехи мыши, когда это необходимо.

 Mixer05 нояб. 2013 г., 14:46
Отличная особенность!
 dotNET19 окт. 2017 г., 13:45
Это один хороший ответ.
 nrofis31 мая 2017 г., 12:29
Можно растянуть и отцентрировать путь в родительском?

Вы можете просто создать круг с прозрачным фоном иStrokeThickness в пользовательском контроле.

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/e,xpression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Ellipse Width="50" Height="50" Stroke="Blue" StrokeThickness="10" Fill="Transparent"></Ellipse>
    </Grid>
</UserControl>

РЕДАКТИРОВАТЬ: Вы можете установить градиентную кисть для обводки, как показано ниже. Вы могли бы заменитьLinearGradientBrush с любым другим типом кисти, как вы хотите.

<Ellipse Width="50" Height="50" StrokeThickness="10" Fill="Transparent">
    <Ellipse.Stroke>
        <LinearGradientBrush>
            <GradientStop Offset="0" Color="Red"/>
            <GradientStop Offset="1" Color="Green"/>
        </LinearGradientBrush>
    </Ellipse.Stroke>
</Ellipse>
 user31029124 янв. 2011 г., 21:47
Чудесное спасибо :)
 user31029124 янв. 2011 г., 20:34
Я пытался, что проблема в том, что это больше не кольцо, так как я вижу большой круг позади :) Я хочу, чтобы второй круг применил к нему некоторый градиент, поэтому большая граница не может сделать это, насколько я могу предвидеть.

Ваш ответ на вопрос