I have a FlipView
in my MainPage
. It's ItemTemplate
binded to a UserControl
called landscapeControl
. It's ItemsSource
is binded to a List of a class called MyLandscape
.
landscapeControl:
<Grid>
<ScrollViewer x:Name="LScrollViewer" MaxZoomFactor="2.0" MinZoomFactor="1.0" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" DoubleTapped="LScrollViewer_DoubleTapped" >
<Canvas x:Name="inkCanvas" Background="Transparent">
<StackPanel x:Name="LStackPanel" Orientation="Horizontal" Margin="0,0,0,0">
<Image x:Name="LImage0" HorizontalAlignment="Right" Source="{Binding firstImage}" Width="570"/>
<Image x:Name="LImage1" HorizontalAlignment="Left" Source="{Binding nextImage}" Width="570"/>
</StackPanel>
</Canvas>
</ScrollViewer>
</Grid>
MyLandscape
class:
public class MyLandscape
{
public ImageSource firstImage { get; set; }
public ImageSource nextImage { get; set; }
public Canvas inkCanvas { get; set; }
}
My images are showing perfectly. All I want is 3 things:
1) I want to access my Canvas
from my MainPage
. I am trying to do this in flipView_SelectionChanged
event:
landscapeControl pc = flipView1.SelectedItem as landscapeControl;
if (flipView1.Items.Count > 0)
{
var myCanvas = pc.getCanvas();
m_CanvasManager = new CanvasManager(myCanvas);
}
But the pc variable is always null! I want to bind my Canvas
, so I have a Canvas
for every two images?
Is that possible?
One way is to use a Command
to pass an UIElement
back to your model.
Basically your inkCanvas
element will be attached with a CanvasLoadedCommand
like this. Note this command is only called when the inkCanvas
is fully loaded.
<Canvas x:Name="inkCanvas" Background="Transparent">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior>
<Core:InvokeCommandAction Command="{Binding CanvasLoadedCommand}" CommandParameter="{Binding ElementName=inkCanvas}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
I have created a simple DelegateCommand
for this little demo (working source code) here. When the inkCanvas
is loaded,
this.inkCanvas = (Canvas)canvas;
will be called and the inkCanvas
property will then be filled.
private DelegateCommand _canvasLoadedCommand;
public DelegateCommand CanvasLoadedCommand
{
get
{
if (_canvasLoadedCommand == null)
{
_canvasLoadedCommand = new DelegateCommand((canvas) =>
{
this.inkCanvas = (Canvas)canvas;
},
(canvas) => canvas != null);
}
return _canvasLoadedCommand;
}
}
Hope this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With