views:

55

answers:

1

For easy of development I'm using a ViewBox to wrap all content inside a Window. This is because my development machine has a smaller screen than the deployment machine so using a ViewBox allows for better realisation of proportion. Obviously there is no reason for it to be there on Release versions of the code. Is there an easy method to conditionally include/exclude that 'wrapping' ViewBox in XAML?

E.g.

<Window>
  <Viewbox>
    <UserControl /*Content*/>
  </Viewbox>
</Window>
+2  A: 

create two control templates in a resources dictionary somewhere accesible.

they should look like this

<ControlTemplate x:key="debug_view">
    <ViewBox>
        <ContentPresenter Content={Binding} />
    </ViewBox>
</ControlTemplate>
<ControlTemplate x:key="release_view">
    <ContentPresenter Content={Binding} />
</ControlTemplate>

then you could use this in your main view

<Window>
    <ContentControl Template="{StaticResource debug_view}">
        <UserControl /*Content*/ ...>
    </ContentControl>
</Window>

then to switch back and forth just change the lookup key in the StaticResource Binding from 'debug_view' to 'release_view'

if you wanted to make it more dynamic you could additionally do this:

<Window>
    <ContentControl Loaded="MainContentLoaded">
        <UserControl /*Content*/ ...>
    </ContentControl>
</Window>

then in your codebehind

void MainContentLoaded(object sender, RoutedEventArgs e)
{
    ContentControl cc = (ContentControl) sender;
#if DEBUG
    sender.Template = (ControlTemplate) Resources["debug_view"];
#else
    sender.Template = (ControlTemplate) Resources["release_view"];
#endif
}

this way depending on whether or not the DEBUG symbol is defined different templates will be selected.

luke
A bit more involved than the traditional style #if's I was shooting for, but I understand where your going. Thanks.
Nicholas