WPF: Как автоматически изменить путь к его контейнеру? - PullRequest
15 голосов
/ 05 мая 2010

У меня есть путь, размер которого должен соответствовать его контейнеру StackPanel.

<StackPanel x:Name="TrackSurface">
    <Path Fill="AliceBlue"
          Stroke="Black" StrokeThickness="1"
          Data="{StaticResource TranslateZ}">
    </Path>
</StackPanel>

Я думаю об использовании преобразования, связанного с контейнером, но на самом деле не знаю, как это сделать. Может кто-нибудь дать мне подсказку?

Ответы [ 4 ]

25 голосов
/ 05 мая 2010

Я изменил Stackpanel на Grid и Stretch свойства Path to Fill.

<Grid x:Name="TrackSurface"> 
<Path Fill="AliceBlue" 
Stretch="Fill"
      Stroke="Black" StrokeThickness="1" 
      Data="M148,28 C221,133 110.50025,119.5 110.50025,119.5 L124.50016,68.5 z"> 
</Path> 

19 голосов
/ 01 октября 2011

Любая причина, почему вы не используете ViewBox для этого? Это сократит или увеличит путь по мере необходимости. Если вы не хотите, чтобы он масштабировался, а скорее был обрезан, то установите режим обрезки, ограниченный ограничивающим прямоугольником элемента управления. (Я бы обернул путь в ContentPresenter для этого.)

3 голосов
/ 17 августа 2011

Убедитесь, что ваш путь меньше, чем ваша StackPanel.

Самый простой способ для очень простого пути - переместить запятую в каждом числе (то есть разделить все на 10 или 100 в TranslateZ), или для более сложных путей добавить LayoutTransform (при необходимости уменьшить коэффициент масштабирования):

<StackPanel x:Name="TrackSurface">
    <Path Fill="AliceBlue" Stroke="Black" StrokeThickness="1" 
          Data="{StaticResource TranslateZ}">
          <Path.LayoutTransform>
               <ScaleTransform ScaleX="0.1" ScaleY="0.1"/>
          </Path.LayoutTransform>
    </Path>
</StackPanel>

Некоторые замечания:

У меня была похожая проблема с шаблоном кнопки, содержащей путь.Размер кнопки "auto" был определен путем, потому что путь имел наибольшие размеры содержимого шаблона.

Само по себе это не может быть проблемой, потому что если вы укажете высоту / ширину кнопкиили, если горизонтальное / вертикальное выравнивание кнопки установлено на растяжение, конечно, путь будет масштабироваться.

Однако для других значений Horizontal- / VerticalAlignment размер кнопки определяется размером пространства, необходимого для ее содержимого, что в моем случае привело к созданию кнопки с исходными размерами пути.

0 голосов
/ 14 марта 2018

Если вы хотите, чтобы при постоянной ширине обводки не масштабировался, вы можете использовать пользовательский Shape. Фигуры в WPF эффективно инкапсулируют масштабирование геометрии и последующее применение обводки, что означает, что вы можете иметь масштабированный путь, который также всегда имеет одинаковую ширину обводки.

Создать форму довольно просто:

public class MyShape : Shape
{
  public override Geometry DefiningGeometry
  {
    get
    {
      // Create your geometry here
    }
  }
}
...