views:

1416

answers:

3

I have a really simple WPF UserControl:

<UserControl x:Class="dr.SitecoreCompare.WPF.ConnectionEntry"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Name="connEntry" 
BorderBrush="Navy" BorderThickness="1" Margin="5,0,0,5" >
<StackPanel Margin="0,10,0,0" >
    <Label FontWeight="ExtraBold" Content="{Binding ElementName=connEntry, Path=Title}"></Label>
    <Label Margin="0,5,0,0">Server:</Label>
    <TextBox x:Name="txtServer" TabIndex="1" Text="{Binding Path=ServerName}" ></TextBox>
    <Label>Database:</Label>
    <TextBox x:Name="txtDatabase" TabIndex="2" Text="{Binding Path=DatabaseName}"></TextBox>
</StackPanel>

This is used twice in the same window. Now, I can select the first TextBox on both th instances of my UserControl, but the second ("txtDatabase") textbox cannot be selected, neither by tabbing or clicking. Why is this ? Am I missing something with regards to creating WPF usercontrols ?

EDIT: DatabaseName is not readonly, it is a simple property. The XAML for the window the usercontrol is placed on looks like this:

<Window x:Class="dr.SitecoreCompare.WPF.ProjectDialog"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:dr.SitecoreCompare.WPF"       
    Title="Choose project" Height="280" Width="500" 
    WindowStartupLocation="CenterOwner" WindowStyle="SingleBorderWindow" HorizontalAlignment="Center" ShowInTaskbar="False" ShowActivated="True" ResizeMode="NoResize" VerticalContentAlignment="Top" VerticalAlignment="Center">
    <StackPanel>
        <Label>Choose databases</Label>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <c:ConnectionEntry Grid.Column="0" x:Name="connMaster" Title="Master:" Padding="5" />
            <c:ConnectionEntry Grid.Column="1" x:Name="connSlave"  Title="Slave:"  Padding="5" />
        </Grid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0" >
            <Button x:Name="btnCancel" Click="btnCancel_Click">Cancel</Button>
            <Button x:Name="btnOK" Click="btnOK_Click">OK</Button>
        </StackPanel>
    </StackPanel>

</Window>
A: 

This works in XamlPad, so I think there is something outside the code you posted that is causing the problem. Is DatabaseName readonly?

dmo
A: 

I tried it out in VS 2008 and it works fine. What's the code for the object you're binding to the UserControl, the class that has the ServerName and DatabaseName properties in it? It seems like there must be something else going on besides just the markup above.

Kyralessa
+1  A: 

Try Mode=TwoWay in your binding. I've seen this where the initialization sets the value and the control can not set the the value.

<TextBox x:Name="txtDatabase" TabIndex="2" Text="{Binding Path=DatabaseName, Mode=TwoWay}"></TextBox>
Geoff Cox