I admit to not having tried this and I've done nothing with XML datasources
so I'm a bit out of my waters... but at first glance it seems that you'd end
up with a string as the content of your button (but you didn't say that so
I'm just stabbing around here).
The XML binding result is a string, right? So, you're assigning a string to
the content of the button -- granted the string is "<Image... >" but it's not
a control. The color works because there is a value converter that converts
strings (green) into brushes.
Try using your first code example but binding the Image's Source property to
a string you get from the XML. That should work since the image is then
instantiated by the XAML parser and the Source property will be databound.
<Button.Content>
<Image Source="{Binding XPath=... }" />
</Button.Content>
"muchinger@web.de" wrote:
> All,
>
> this code works fine. You may past it into XAMLPad or similar and you
> should see a button with green background and an image on it (well you
> should make sure that you have an icon named "about.ico" in c:\)
>
> <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/
> presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
> <Page.Resources>
> <XmlDataProvider x:Key="DataProvider" XPath="Data">
> <x:XData>
> <Data xmlns="">
> <Control Name="BTN_1">
> <Background>Green</Background>
> </Control>
> </Data>
> </x:XData>
> </XmlDataProvider>
> </Page.Resources>
> <Page.DataContext>
> <Binding Source="{StaticResource DataProvider}" />
> </Page.DataContext>
> <Button x:Name="BTN_1" Height ="100" Width="100">
> <Button.Content>
> <Image Source ="C:\about.ico" />
> </Button.Content>
> <Button.Background>
> <Binding XPath="Control[@Name='BTN_1']/Background" />
> </Button.Background>
> </Button>
> </Page>
>
> As you can see I data bind the Button.Background property to a value
> in the XML island. The same I want to do with the Button.Content. So
> this is what I tried.
>
> <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/
> presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
> <Page.Resources>
> <XmlDataProvider x:Key="DataProvider" XPath="Data">
> <x:XData>
> <Data xmlns="">
> <Control Name="BTN_1">
> <Background>Green</Background>
> <Content>
> <Image Source ="C:\about.ico" />
> </Content>
> </Control>
> </Data>
> </x:XData>
> </XmlDataProvider>
> </Page.Resources>
> <Page.DataContext>
> <Binding Source="{StaticResource DataProvider}" />
> </Page.DataContext>
> <Button x:Name="BTN_1" Height ="100" Width="100">
> <Button.Content>
> <Binding XPath="Control[@Name='BTN_1']/Content" />
> </Button.Content>
> <Button.Background>
> <Binding XPath="Control[@Name='BTN_1']/Background" />
> </Button.Background>
> </Button>
> </Page>
>
> If you paste this code into XAMLPad you will see a button with green
> background only. The image is not set as the content of the button.
> Why this?
> Is my approach too naive? Do I have to take a different one like
> applying a control template in order to change the button content?
> Just for a little background: why am I doing this all? Goal is to have
> a page with a button on it. Once the page is rendered I want to be
> able to just switch the page's data context to another xml data island
> and have the button display a new image. Basically this is my notion
> of separating presentation and data. The presentation data binds to
> the data and the latter is easily interchangeable.
>
> Thanks for any input,
> Michael
>
>