开发者

WPF relative path problem

开发者 https://www.devze.com 2022-12-15 02:25 出处:网络
I have created a custom TaskButton control that takes an image and text. The properties are set like this:

I have created a custom TaskButton control that takes an image and text. The properties are set like this:

<custom:TaskButton Text="Calendar" ImagePath="Images/calendar.png" ... />

My custom control class implements Text and ImagePath properties, and the control template for the custom control (in Themes\Generic.xaml) sets its content like this, using a RelativeSource object to get the image path:

<!-- Button Content -->
<StackPanel>
    <Image Source="{Binding Path=ImagePath, RelativeSource={RelativeSource TemplatedParent}}" Width="24" Height="24" Stretch="Fill" Margin="10,0,0,0" />
    <TextBlock Text="{TemplateBinding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Segoe UI" FontWeight="开发者_开发问答Bold" Margin="6,0,10,0" Foreground="Black" />
</StackPanel>

The control works fine in most cases, but in a particular project, the relative path to the button's image does not get resolved correctly, and the button image is not displayed. Here is what I have figured out so far:

  • I am entering the path correctly when I use the custom control. If I place an image control on the same design surface with the same relative path, it is resolved correctly.

  • The problem is with the relative path. If I replace the relative path with an absolute path, the path is resolved correctly and the image is displayed.

As I mentioned above, the control works fine in most cases. The one case where it isn't working is a Prism 2.1 project, where the control is instantiated on a user control in a Prism module. The module is a simple class library, but it has all of the references of a WPF project.

Any idea why the relative path would fail? Thanks in advance for your help.


I finally figured out the problem. It was actually in the C# backing class for my control. I declared an ImagePath property as a string, since that was how I was going to specify the image. Oops--bad call on my part. That property should actually be an ImageSource property, not a string. WPF has a built-in ImageSourceConverter class that will resolve the path and return the specified image. So, I simply changed the property name from ImagePath to Image, and changed its type from string to ImageSource. That solved the problem.

Thanks to Aviad P. for taking a crack at this. It was unsolvable without the C# code showing the property declarations. I'll post all code and markup next time.

0

精彩评论

暂无评论...
验证码 换一张
取 消