Можно ли связать PolyLineSegment.Points через xaml в ControlTemplate? - PullRequest
0 голосов
/ 28 марта 2019

Недавно мне нужно было изменить шаблон большого пальца.Я хочу изменить его форму на треугольник, как это.Я использовал Path как его ControlTemplate.Вот код:

 <Thumb
        Width="100"
        Height="30"
        HorizontalAlignment="Left"
        VerticalAlignment="Top">
        <Thumb.Template>
            <ControlTemplate>
                <Path Fill="Red">
                    <Path.Data>
                        <PathGeometry>
                            <PathFigure>
                                <PolyLineSegment>
                                    <PolyLineSegment.Points>
                                        <PointCollection>
                                            <Point X="0" Y="0" />
                                            <Point X="{TemplateBinding Width}" Y="{TemplateBinding Height}" />
                                            <Point X="0" Y="{TemplateBinding Height}" />
                                        </PointCollection>
                                    </PolyLineSegment.Points>
                                </PolyLineSegment>
                            </PathFigure>
                        </PathGeometry>
                    </Path.Data>
                </Path>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>

Вы видите, что я пытался привязать PolyLineSegment.Points к ширине и высоте большого пальца.

Но Visual Studio выдает ошибку:

"Ошибка Объект типа 'System.Windows.TemplateBindingExpression'

не может быть преобразован в тип 'System.Double'. "

Я не знаю, почему это не может работать.Кто-нибудь может дать мне подсказку?

Обновление:

Я обнаружил, что это потому, что Point.X или Point.Y не является свойством зависимости.Вот почему привязка не работает.

Я решаю этот вопрос путем привязки к LineSegment. Этот вопрос закрыт.

1 Ответ

0 голосов
/ 28 марта 2019

Наконец, я нашел, где проблема (причина была обновлена ​​в вопросе), и нашел новый способ решить эту проблему.

 <ControlTemplate>
                <Path Fill="{TemplateBinding Background}">
                    <Path.Data>
                        <PathGeometry>
                            <PathFigure StartPoint="0 0">
                                <LineSegment>
                                    <LineSegment.Point>
                                        <MultiBinding Converter="{StaticResource thumb2PointConverter}" ConverterParameter="rightBottom">
                                            <Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
                                            <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
                                        </MultiBinding>
                                    </LineSegment.Point>
                                </LineSegment>

                                <LineSegment>
                                    <LineSegment.Point>
                                        <MultiBinding Converter="{StaticResource thumb2PointConverter}" ConverterParameter="leftBottom">
                                            <Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
                                            <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Thumb}" />
                                        </MultiBinding>
                                    </LineSegment.Point>
                                </LineSegment>
                            </PathFigure>
                        </PathGeometry>
                    </Path.Data>
                </Path>
            </ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...