Windows Vista Forums

Data binding of Button.Content to an image in a XML island does not work
  1. #1


    muchinger@web.de Guest

    Data binding of Button.Content to an image in a XML island does not work

    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




      My System SpecsSystem Spec

  2. #2


    tbrummel Guest

    RE: Data binding of Button.Content to an image in a XML island does no

    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
    >
    >


      My System SpecsSystem Spec

Data binding of Button.Content to an image in a XML island does not work problems?

Similar Threads
Thread Thread Starter Forum Replies Last Post
Can't get Monkey Island 4 to work on Vista ajapi Gaming 1 21 Jun 2009
Lego Island Wont Work On Vista JJOR64 Vista Games 25 19 Aug 2008
data binding Joerg Engel Avalon 1 22 Mar 2006
The content type text/html of the response message does not match the content type of the binding (text/xml; charset=utf-8)." hazz Indigo 2 04 Mar 2006
Re: Data binding doesn't work for Property Tag syntax ? Mikhail Avalon 0 10 Jan 2006